NeHe_Lesson6 纹理贴图

SETP1:读入位图文件

//读入位图文件
AUX_RGBImageRec *LoadBMP(char *Filename) 
{
 
  FILE *File=NULL;                               
    if (!Filename)                            
 
    {
       
return NULL;                               
    }
   
File=fopen(Filename,"r");                   
    if (File) 
    {
        fclose(File);
        return auxDIBImageLoad(Filename);  // Load The Bitmap And Return A Pointer
    }
    return NULL;                                
}

AUX_RGBImageRec *TextureImage[1];//这个结构将持有图像的宽度, 高度和数据

TextureImage[0]=LoadBMP("Data/NeHe.bmp")// 载入位图

 

SETP 2: 产生所需数量的纹理名

glGenTextures(1,              //需要产生纹理名的数目

              &texture[0] );  //保存纹理名的数组

 

SETP 3:创建纹理

创建纹理这个步骤分为几个小步,对于每一个纹理来说它们必须作为原子操作一起调用,然后才能设置第二个纹理

1.创建纹理对象
  
glBindTexture(GL_TEXTURE_2D, texture[0]); //texture data 分配name

2. 指定一个二维纹理

glTexImage2D(GL_TEXTURE_2D,

    0,//LOD级数

    3,//指定纹素中存储哪些分量(R,G,B,A,深度,辉度或强度)
      //这里只指定有关RGBA数据成分,1:选择R 2:选择R A3:选择R G B4:选择R G B A
         
    
TextureImage[0]->sizeX,

    TextureImage[0]->sizeY,

    0,//纹理边界

    GL_RGB,//图像数据格式

    GL_UNSIGNED_BYTE,//像素数据类型

    TextureImage[0]->data);

3.设置过滤方式

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);// Linear Filtering

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);// Linear Filtering

 

SETP 4:使用纹理

glEnable(GL_TEXTURE_2D);        // Enable Texture Mapping

当绑定后纹理对象可以用一个的无符号整数表示。

glBindTexture(GL_TEXTURE_2D, texture[0]);       // Select Our Texture

glBegin() glEnd()之间为每个顶点设置纹理坐标,glTexCoord 2f 的第一个参数是x坐标 0.0f 就是纹理的左边 1.0f 就是纹理的右边。glTexCoord 2f 的第二个参数是y坐标 0.0f 就是纹理的底边,而 1.0f 就是纹理的顶边。

如果想变换纹理, 就需要绑定另一个纹理。 有一点很重要, 那就是绑定纹理操作不能在glBegin() glEnd() 之间进行。

你可能感兴趣的:(less)