【发布时间】:2011-08-30 10:08:33
【问题描述】:
我有两个纹理,云和山,每个都有 512 x 512 大小,我打算创建一个 gl_FragColor 输出,它将从以前的纹理中获取像素值。在这种情况下,我想从第一个纹理中的第一个像素获得gl_FragColor 中的第一个像素,从第二个纹理中的第二个像素获得gl_FragColor 中的第二个像素,从gl_FragColor 中的第三个像素第一个纹理中的第三个像素等等。这是我的片段着色器代码:
uniform sampler2D tex0;
uniform sampler2D tex1;
void main() {
vec4 cloud = texture2D(tex0, gl_TexCoord[0].st);
vec4 hill = texture2D(tex1, gl_TexCoord[0].st);
for (int i=0;i<512;i++) {
for (int j=0;j<512;j++) {
if ( j%2 == 0)
gl_FragColor = cloud;
else
gl_FragColor = hill;
}
}
}
这是纹理单元设置:
t1 = loadTexture("pY.raw", 512, 512);
t2 = loadTexture("pZ.raw", 512, 512);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, t2);
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t1);
glEnable(GL_TEXTURE_2D);
这是统一的设置: glUseProgram(程序);
GLuint t1Location = glGetUniformLocation(program, "tex0");
GLuint t2Location = glGetUniformLocation(program, "tex1");
glUniform1i(t1Location, 0);
glUniform1i(t2Location, 1);
问题是,程序的输出只是山丘纹理,我不知道如何解决这个问题。有什么建议吗?
【问题讨论】:
-
发布您的纹理单元和统一设置代码。
-
发表在问题部分^^
-
这两种纹理都可以在 GLSL 中访问。例如,
gl_FragColor = cloud;不带 if 条件的命令将输出云纹理,而gl_FragColor = hill;不带 if 条件将输出山纹理。