在具有独立纹理坐标的GLSL中进行多重纹理的正确方法是什么?

时间:2015-08-11 11:34:07

标签: opengl glsl multitexturing

多纹理过去简单易行。绑定纹理,调用glBegin,然后进行渲染,而不是glTexCoord为每个纹理调用glMultiTexCoord。然后所有这些都被弃用了。

我正在四处寻找正确的方法来实现这一目标,但我发现的所有教程,无论是来自官方Khronos集团的消息来源还是博客,都假设你想要使用同一套所有纹理的纹理坐标,这是一个非常简单的假设,不适用于我的用例。

让我说我有纹理A和纹理B,我想在rect rB中使用纹理A中的alpha值在rect {{rA中渲染颜色。 1}},(与rB具有相同的高度和宽度,为了简单起见,但使用OpenGL 3没有相同的Left和Top值),没有任何弃用的功能。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

在着色器中,您只需声明(并使用)一组额外的纹理坐标和第二个采样器。

vec4 sample1 = texture(texture1, texCoord1);
vec4 sample2 = texture(texture2, texCoord2);

指定模型时,将第二组texCoords添加到属性:

glVertexAttribPointer(tex1Loc, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(texCoord1, Vertex));
glVertexAttribPointer(tex2LOC, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(texCoord2, Vertex));