OpenGL纹理贴图的基本概概念及API
载入纹理
glTexImage2D()
glEnable(GL_TEXTURE_2D)
glTexSubImage()
替换一个纹理帖图常常比直接使用glTexImage重新载入一个新纹理快得多。
纹理矩阵
glMatrixMode(GL_TEXTURE)
纹理环境
glTexEnvi()
glTexEnvf()
glTexEnviv()
glTexEnvfv()
纹理参数
glTexParameterfv()
GL_TEXTURE_MAG_FILTER
GL_TEXTURE_MIN_FILTER
基本过滤:
线性过滤GL_NEAREST
最邻近过滤GL_LINEAR
纹理环绕:
GL_TEXTURE_WRAP_S/GL_TEXTURE_WRAP_T
Mip帖图
纹理对象
纹理对象允许一次载入超过一个的纹理状态(包括纹理图像),以及在它们之间进行快速切换。纹理状态由当前线定的纹理对象维护的,而纹理对象是由一个无符号整数标识的。可用下函数分配纹理对象
Void glGenTextures(GLsizei n, GLuint *textures)
为绑定其中一种纹理状态,可调用下面函数:
Void glBindTexture(GLenum target, GLuint texture)
当程序终止时,需要删除纹理对象,以完成最后的清理任务。
glDeleteTextures(TEXTURE_COUNT,textures)
各向异性过滤:
如果我们在进行纹理过滤时考虑了观察角度,那么这种方法就叫各向异性过滤(anisotropic texture filtering)。
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,fLargest)
纹理坐标生成
glEnable(GL_TEXTURE_GEN_S)
glEnable(GL_TEXTURE_GEN_T)
glEnable(GL_TEXTURE_GEN_R)
glEnable(GL_TEXTURE_GEN_Q)
可用如下函数设置用于纹理坐标生成的函数或方法:
Void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
Void glTexGenfv(GLenum coord, GLenum pname, GLfloat* param)
物体线性帖图GL_OBJECT_LINEAR
视觉线性帖图GL_EYE_LINEAR
球体帖图GL_SPHERE_MAP
立方体帖图GL_REFLECTION_MAP
立方体帖图增加了6个新值,它们可以传递到glTexImage2D函数中。GL_TEXTURE_CUBE_POSITION_X,
GL_TEXTURE_CUBE_NEGATIVE_X,
GL_TEXTURE_CUBE_POSITION_Y,
GL_TEXTURE_CUBE_NEGATIVE_Y,
GL_TEXTURE_CUBE_POSITION_Z,
GL_TEXTURE_CUBE_NEGATIVE_Z,
多重纹理
glActiveTexture(GL_TEXTURE1)