多纹理过去是简单直接的。你绑定你的纹理,你调用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));