我正在编写一个格斗游戏,其中每个角色都有大量的精灵,每个角色都有几个不同的调色板交换。我一直在尝试为每个精灵使用灰度纹理,并为每个调色板使用 256x1 纹理。
我的着色器看起来像这样:
顶点:
varying vec2 coord;
void main(void)
{
coord = gl_MultiTexCoord0.xy;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
分段:
uniform sampler2D palette;
uniform sampler2D texture;
varying vec2 coord;
void main()
{
gl_FragColor = texture2D(palette, vec2(texture2D(texture, coord).r, 0));
}
使用 glGetUniformLocation 和 glUniform1i 将“调色板”设置为 1,将“纹理”设置为 0。他们编译得很好,链接也很好。我可以在我的绘图代码中使用程序对象。
问题是,我不知道如何使用多重纹理来让“调色板”和“纹理”纹理在着色器中相互协作。这是我第一次使用多重纹理,我似乎无法弄清楚如何让它适用于这种解决方案。有谁知道如何使用这些着色器(如果它们是正确的)来模拟调色板交换?
编辑:这是我现在的绘图代码:
glUseProgram(paletteProgram);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, palette);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2f(w1, h1);
glVertex3f(x1, y1, 0);
glTexCoord2f(w1, h2);
glVertex3f(x1, y2, 0);
glTexCoord2f(w2, h2);
glVertex3f(x2, y2, 0);
glTexCoord2f(w2, h1);
glVertex3f(x2, y1, 0);
glEnd();
glUseProgram(0);