摘抄一些opengl的笔记,非原创!
在进行纹理贴图的时候,图像会出现在物体表面上的(u,v)位置上,而这些值在[0,0,1.0]范围内。但是,如果超出这个值域,会发僧什么情况呢?这由纹理的映射函数来决定的。在opengl中,这类映射函数称为“Texture Wrapping Mode”;在D3D中,称为“Texture Addresing Mode”。常见的方式有下面几种:
1.重复(GL_REPEAT):图像表面上,重复出现。在算法上,忽略纹理坐标的整数部分,并将纹理图复制黏贴在物体表面上。对于大多数复制纹理的使用,在纹理顶部的纹理单元应与底部的纹理单元相匹配,在纹理左侧的纹理单元也应与右侧的纹理单元相匹配。这样才能做到无缝连接。
2.截取(GL_CLAMP):将大于1.0的数值设置为1.0,将小于0.0的数值设置为0.0,即将超出【0,0,1.0】范围的数值截取到【0.0,1.0】范围内,这样会导致纹理边缘的重复。
3.镜像重复(GL_MIRRORED_REPEAT_ARB):图像在物体表面上不断重复,但是每次重复的时候对图像进行镜像或者反转。这样在纹理边缘处比较连贯。在opengl中通过ARB_texture_mirrored_repeat扩展来实现。
4.边界截取(CLAMP_TO_BORDER_ARB):在【0,0,1.0】范围外的参数值用单独定义的边界颜色或纹理边缘惊醒绘制。适用于绘制物体表面的贴花纸。在Opengl中通过ARB_texture_border_clamp扩展来实现,GLAMP_TO_BORDER_ARB在所有mipmap层次上对纹理坐标进行截取,使nearest和linear过滤只返回边界纹理单元的颜色。
5.边缘截取(GL_CLAMP_TO_EDGE):总是忽略边界。处于纹理边缘或者靠近纹理边缘的纹理单元都用作纹理计算,但是不包括边界的纹理单元