图象从纹理图象空间映射到帧缓冲图象空间,映射需要重新构造纹理图像,这样就会造成应用到多边形上的图像失真,因此在使用纹理前,我们通常需要使用glTexParmeteri() 函数来确定如何把纹理象素映射成像素,对纹理进行过滤。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
GL_TEXTURE_2D: 操作2D纹理
GL_TEXTURE_MAG_FILTER:指当纹理图象被使用到一个大于它的形状上时(纹理图象中的一个像素会被应用到实际绘制时的多个像素。例如一幅256*256的纹理图像应用到一个512*512的图形上),我们可以使用GL_NEAREST和GL_LINEAR,如果选择前者,那么最靠近像素中心的那个纹理单元将用于放大和缩小,这可能导致锯齿状的人工痕迹(有时会比较严重),如果选择后者,那么OpenGL就会对靠近像素中心的一块2×2的纹理单元去加权平均值,用于放大和缩小(如果是三维纹理,就是对一块2×2×2纹理单元加权取平均值,是一维纹理那它就对2个纹理单元取平均值)。GL_NEAREST所需计算量要少于GL_LINEAR,因此前者执行速度上会比后者快一些。从视觉效果上看,前者效果较差,在一些情况下锯齿现象明显,后者效果更为平滑,但如果纹理图像本身比较大时,则两者在视觉效果上就会比较接近。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
GL_TEXTURE_MIN_FILTER:指当纹理图象被使用到一个小于或等于它的形状上时,可选择的设置有GL_NEAREST, GL_LINEAR,GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_NEAREST和GL_LINEAR_MIPMAP_LINEAR.其中后面四个暂时不需了解。前两项和GL_TEXTURE_MAG_FILTER中类似。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_CLAMP);
GL_TEXTURE_WRAP_T:指S方向上的贴图模式,GL_CLAMP: 将纹理坐标限制在0.0,1.0的范围之内.如果超出了会 将边缘拉伸填充。
此函数最后一个参数也可为GL_REPEAT 表示如果超出了会重复填充。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_CLAMP);
GL_TEXTURE_WRAP_S:指T方向上的贴图模式,与前者一样。如果不指定参数,默认值为GL_REPEAT