(一) 载入纹理
1.从磁盘中载入Targa 文件
GLbyte *gltReadTGABits(const *szFileName,GLint *iWidth,GLint *iHeight,GLint *iComponents,GLenum *eFormat); 如果调用成功,返回指向图形的指针,否则 null
2.将 纹理载入内存
void glTexImage1D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLint border,GLenum format,GLenum type,void *data);
void glTexImage2D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,void *data);
void glTexImage3D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data);
target 参数为 GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D level 参数指定了这些函数所加载的mip贴图层数,一般设为0. internalformat 如果之前用了gltReadTGABits函数,就可以用iComponents 作为参数,
width height depth 指定了被加载纹理的宽度,高度,深度
border 为纹理贴图指定一个边界宽度 format 可以使用gltReadTGABits函数 的eFormat参数
type 用GL_UNSIGNED_BYTE data 用gltReadTGABits函数的返回值
3.更新纹理
void glTexSubImage1D(GLenum target,GLint level,GLint xOffset,GLsizei width,GLint border,GLenum format,GLenum type,void *data);
void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,void *data);
void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLint zOffset,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data);
4.纹理对象
void glGenTextures(GLsizei n,GLuint *textures);
这个函数 指定纹理对象的数量,和一个指向每一个对象的指针
绑定和切换纹理对象
void glBindTexture(GLenum target,GLuint texture);
删除纹理对象
void glDeleteTextures(GLsizei n,GLuint *textures);
(二)纹理应用
1.基本过滤
最邻近过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
线性过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAE);
2.纹理环绕
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
3.指定纹理坐标
Batch.Begin(GL_TRIANGLES,int,int n);
n 是应用的纹理数
Batch.Normal3f(x,y,z); 添加一个表面法线
Batch.MultiTexCoord2f(x,y,z); 添加了一个纹理坐标 x是纹理层次 一般为0
Batch.Vertex3f(x,y,z); 添加一个顶点坐标
(三)Mip贴图
glGenerateMipmap(GL_TEXTURE_2D); 生成mip层