我正在运行this example,
但改变:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
为:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
我在顶部和右侧的图像略有不同。
但从代码中可以看出:
glBegin(GL_QUADS);
//lower left
glTexCoord2f(0, 0);
glVertex2f(-1.0, -1.0);
//upper left
glTexCoord2f(0, 1.0);
glVertex2f(-1.0, 1.0);
//upper right
glTexCoord2f(1.0, 1.0);
glVertex2f(1.0, 1.0);
//lower right_
glTexCoord2f(1.0, 0);
glVertex2f(1.0, -1.0);
glEnd();
纹理不会超出范围,为什么GL_CLAMP很重要?
答案 0 :(得分:1)
在片段着色器中,颜色与当前纹理元素右上角的颜色混合。纹理坐标中添加了vec2(0.0625, 0.0625)
。因此,当查找高于或等于(1.0 - 0.0625)= 0.9375的纹理坐标时,使用GL_CLAMP
始终获得相同的值。
void main() {
vec4 s1 = texture2D(tex0, gl_TexCoord[0].st);
vec4 s2 = texture2D(tex1, gl_TexCoord[0].st + vec2(0.0625, 0.0625));
gl_FragColor = mix(vec4(1, s1.g, s1.b, 0.5), vec4(s2.r, s2.g, 1, 0.5), 0.5);
}