【发布时间】:2012-07-22 11:20:27
【问题描述】:
我正在尝试在 OpenGL 中的另一个纹理上放置一个纹理(带有 alpha)。我这样做没有任何问题,但这不是我想要的:我的最近的图像的颜色受到背景图像(最远的纹理)的强烈影响,尽管出现橙色的红色。
任何人都知道可以解决此问题的混合(或摆脱 alpha)方法吗?
混合初始化:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
绘画场景:
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
//furthest image (background)
glBindTexture(GL_TEXTURE_2D, texture[1]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(1, 0); glVertex2f(500, 0);
glTexCoord2f(1, 1); glVertex2f(500, 500);
glTexCoord2f(0, 1); glVertex2f(0, 500);
glEnd();
//nearest image (appears orange, should be red)
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(100, 100);
glTexCoord2f(1, 0); glVertex2f(300, 100);
glTexCoord2f(1, 1); glVertex2f(300, 300);
glTexCoord2f(0, 1); glVertex2f(100, 300);
glEnd();
glutSwapBuffers();
编辑。 这是一张描述其外观的图像:
这是它的外观图片:
【问题讨论】:
-
我看不出你在混合什么颜色,你想要达到什么效果,以及你实际达到什么效果。如果最近的图像是透明的,为什么它不会受到背景的影响?橙色有什么问题?
-
@Kos 好吧,我有一个背景是绿草,我有一个红色纹理,其中有使用 alpha 的点。在那些地方我想提到背景(草)。这就像 2D 游戏,玩家在表面上行走。相反,我的背景颜色会影响“玩家”,因此我的红色纹理变成橙色(红色 + 绿色)。
标签: opengl textures glut alpha blending