3つのクワッド、A、B、およびCを使用してシーンを実装しました。クワッドCはクワッドBの後ろにあります。クワッドBはクワッドAの上にあります。
クワッドBを除いて、すべてのクワッドは同じテクスチャを使用しています。クワッドBはアルファマップを使用し、他のすべてのクワッドが使用しているベーステクスチャを使用します。
以下のコードサンプルは、固定機能のマルチテクスチャリングを使用してQuadBを描画する方法です。
GLuint alphaGLTexture;
SDL_SurfaceToGLTexture(aTexture, &alphaGLTexture);
GLuint baseGLTexture;
SDL_SurfaceToGLTexture(baseTexture, &baseGLTexture);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, alphaGLTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, baseGLTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTranslatef(0.0f, 0.0f, 0.0f);
double u_coord = 0.0f, v_coord = 0.0f;
// Renders Quad B
glActiveTexture(GL_TEXTURE0)
glBegin(GL_QUADS);
// remainder of code modifies u_coord, v_coord and draws the other glVertex3f's.
glMultiTexCoord2f(GL_TEXTURE0, u_coord, v_coord);
glMultiTexCoord2f(GL_TEXTURE1, u_coord, v_coord);
glVertex3f(posax, posay, posaz);
マルチテクスチャのアルファマップをクアッドBに適用すると、テクスチャのクワッドAとCの色が変わり、クアッドBよりも暗くなります。
GL_TEXTURE1への言及を削除すると、Quad Bでのアルファマッピングは失われますが、すべてがうまくレンダリングされ、調光は行われません。
推奨事項やヒントはありますか?glTexEnviの呼び出しに何か問題がありますか?