我已经使用 3 个四边形 A、B 和 C 实现了一个场景。四边形 C 在四边形 B 后面。四边形 B 位于四边形 A 的顶部。
所有四边形都使用相同的纹理,除了四边形 B。四边形 B 使用 alpha 贴图和所有其他四边形正在使用的基础纹理。
下面的代码示例是我如何使用固定功能多纹理绘制 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);
当我将多纹理 alpha 贴图应用到 Quad B 时,带纹理的 Quads A 和 C 会改变颜色并最终比 Quad B 更暗。
当我删除对 GL_TEXTURE1 的任何提及时,一切都很好地呈现,没有变暗,尽管我失去了 Quad B 上的 alpha 映射。
有什么建议或提示吗?我的 glTexEnvi 调用有问题吗?