各キャラクターに多数のスプライトがあり、各キャラクターにいくつかの異なるパレット スワップがある格闘ゲームをコーディングしています。各スプライトにグレースケール テクスチャを使用し、各パレットに 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 で「palette」を 1、「texture」を 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);