在OpenGL中绘制完全白色纹理

时间:2015-08-21 01:44:42

标签: c++ opengl colors draw game-engine

我想要做的是在OpenGL中绘制一个像普通的纹理,但是完全是白色的。我尝试过glColor3f(2.f, 2.f, 2.f),但这不起作用。我只想绘制一定纹理的形状,但没有颜色,只有白色,所以我试图绘制纹理但是白色...

澄清所需的结果:我希望从纹理中采样的所有颜色的RGB部分为白色,而alpha值是从纹理采样的颜色。因此,如果纹理中的值是(R,G,B,A),我希望采样的颜色为(1.0f,1.0f,1.0f,A)。

3 个答案:

答案 0 :(得分:2)

使用像素着色器并将每个片段的颜色设置为白色。

答案 1 :(得分:1)

要将纹理中的颜色变为白色,但仍使用从纹理中采样的Alpha值,您可以使用:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

使用GL_ADD纹理环境模式,输入的片段颜色(上面第二次调用设置为白色)将添加到从纹理采样的颜色中以获得输出颜色。由于输出颜色被限制在[0.0,1.0]的范围内,因此纹理中的颜色成分无关紧要,因为在将结果钳制到1.0之前,它们将被添加到1.0。因此输出的RGB颜色部分将始终为白色。

不太明显的部分是alpha值会发生什么。根据规范,对于GL_ADD纹理env模式,来自输入片段的alpha值和从纹理中采样的alpha值是相乘。将片段alpha设置为1.0,这意味着结果值是纹理的alpha值,这是您想要的。

答案 2 :(得分:0)

在代码中创建1x1白色RGBA位图。

GLubyte texData[] = { 255, 255, 255, 255 };

将数据复制到纹理。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, texData);