如何使用GLSL渲染多个纹理

cla*_*amp 3 opengl glsl

我即将将所有渲染从"旧"opengl移植到glsl.

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

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

"tex"是我对glsl这样的纹理的名称:

int loc = glGetUniformLocationARB(id, "tex");
glUniform1iARB(loc, 0);
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*mas 6

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


did*_*ito 5

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

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

也许这有助于某人!