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



多纹理过去是简单直接的。你绑定你的纹理,你调用glBegin,然后你做你的渲染,除了glTexCoord,你调用glMultiTexCoord为每个纹理。然后所有这些都被弃用了

我正在寻找正确的方法,但是我找到的所有教程,无论是从官方的Khronos Group来源还是在博客上,都假设你想要为所有的纹理使用相同的纹理坐标集,这是一个非常简单的假设,并不适用于我的用例。

假设我有纹理A和纹理B,我想渲染纹理B的颜色,在矩形rB中,使用纹理A的alpha值,在矩形rA中(为了简单起见,它具有与rB相同的高度和宽度,但不相同的Left和Top值),使用opengl3,没有任何弃用的功能。正确的做法是什么?

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

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

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

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));

相关内容

  • 没有找到相关文章