私は3つのクワッドA、B、Cを使ってシーンを実装しました。クワッドCはクワッドBの背後にあります。クワッドBはクワッドAの上に座っています。マルチシーンはシーン全体を暗くしています!
すべてのクワッドはクワッドB.クワッドBは、他のすべてのクワッドが使用しているアルファマップとベーステクスチャを使用します。
以下のコードサンプルは、固定機能マルチテクスチャでQuad Bを描画する方法です。
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);
IはクワッドB、テクスチャクワッドA及びC変更色multitexturedアルファマップを適用し、IはGL_TEXTURE1のすべてに一切の言及を削除すると、クワッドB.
より暗く終わるない、うまくレンダリング私はQuad Bでアルファマッピングを失いますが、それでも調光します。
推奨事項やヒントはありますか? glTexEnviの呼び出しに何か問題がありますか?
はglActiveTexture(GL_TEXTUREN)を呼び出しています。 glEnable(GL_TEXTURE_2D)を呼び出すことと同義です。 ? –
@ct:いいえ、現在アクティブなテクスチャユニットを切り替え、glEnable/glDisable(GL_TEXTURE_ ...)はアクティブなテクスチャユニットを有効/無効にします。これはglMatrixModeに非常に似ています。 – datenwolf