【发布时间】:2016-04-09 01:06:51
【问题描述】:
正如标题所说,每当我像这样启用混合时:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
我无法使用立即模式绘制任何纹理。它是 RGBA 纹理。我确认图像加载和生成工作正常,因为当我从 GPU“下载”像素进行调试时,alpha 值似乎是正确的(例如,并非所有像素都是 255。)。但是,在启用混合的情况下像这样绘制纹理就会消失:
glColor4ub(255, 255, 255, 0);
_texture->setActive(0);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(_x, _y);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(_x + _width, _y);
glTexCoord2f(1.0f, 1.0f);
glVertex2f(_x + _width, _y + _height);
glTexCoord2f(0.0f, 1.0f);
glVertex2f(_x, _y + _height);
glEnd();
_texture->setActive() 简单地称之为:
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, m_ID);
没有混合,我得到以下结果:
但是混合后它什么也没有画出来(再次确认纹理的 alpha 值是正确的!):
什么时候应该是这样的:
这里有什么问题?
更新
应用glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 后,我现在得到了预期的输出:
【问题讨论】:
-
"glActiveTexture(GL_TEXTURE0 + i);"我是什么?
-
我是
setActive的参数
标签: c++ c opengl textures immediate-mode