3

我即将将我所有的渲染从“旧”opengl 移植到 glsl。

现在我有一个具有不同纹理的网格,所以在“旧”gl 中我只是使用 bindTexture 来更改纹理。我想,我仍然需要这样做,但是缺少一些东西,因为我的一切似乎都只用第一个纹理渲染。

uniform sampler2D tex;
void main() {
    gl_FragColor = tex2D(tex, gl_TexCoord[0].st);
}

“tex”是我这样放在 glsl 中的纹理名称:

int loc = glGetUniformLocationARB(id, "tex");
glUniform1iARB(loc, 0);

注意:我不是在谈论多重纹理!:-)

4

2 回答 2

6

您已将纹理单元 0 绑定到sampler2D,但您还需要将纹理绑定到纹理单元。所以这只是一个glBindTexture电话。

于 2009-11-22T21:56:01.880 回答
5

我对告诉 GLSL 哪个纹理单元用于哪个采样器的方式感到困惑。我搜索了几个小时来解决我的问题,但无法解决,因为我认为这个话题在所有文献中都没有得到很好的解释。

这是一个有价值的解释:(参见“使用 GLSL 使用纹理”部分) http://nehe.gamedev.net/data/articles/article.asp?article=21

也许这对某人有帮助!

于 2009-11-24T14:57:10.817 回答