我在Linux中看到来自OpenGL的颜色略微变暗/ alpha输出。我没有看到1.0的红色分量值,而是看到〜.96988。例如,我有一个完全红色的矩形(红色分量= 1.0,alpha = 1.0,绿色和蓝色为零)。无论是否启用我的顶点/片段着色器,都会发生调光。OpenGL颜色/ alpha输出稍微变暗
禁用照明,因此在颜色计算中不应包含环境光或其他光源。
glBegin(GL_POLYGON);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertex2f(0.0, 0.0);
glVertex2f(1.0, 0.0);
glVertex2f(1.0, 1.0);
glVertex2f(0.0, 1.0);
glEnd();
我拍摄了所得窗口的屏幕截图,然后将图像加载到绘图程序中并检查任何特定像素。我看到一个红色的分量整数值为247,而不是255,如我所料。当我在启用顶点着色器的情况下运行时,我看到gl_Color.r组件已经是< 1.0,并且gl_Color.a组件也是。
所有的OpenGL状态都是默认值。我错过了什么?
由于问题编辑: 我通过在顶点着色器中检查它的粗略迭代过程确定红色分量的值为〜.96988,并在红色分量高于阈值。我一直在减少恒定的价值,直到我不再看到紫色。这奏效了:
if(gl_Color.r > 0.96988)
{
gl_Color.b = 1.0; \\ show purple instead of the slightly dimmed red.
}
编辑:
//VERTEX SHADER
varying vec2 texture_coordinate;
void main()
{
gl_Position = ftransform();
texture_coordinate = vec2(gl_MultiTexCoord0);
gl_FrontColor = gl_Color;
}
//FRAGMENT SHADER
varying vec2 texture_coordinate;
uniform sampler2D Texture0;
void main(void)
{
gl_FragColor = texture2D(Texture0, texture_coordinate) * gl_Color;
}
Texture0在这种情况下是完全饱和的红色长方形红色= 1.0,阿尔法= 1.0。如果没有纹理,使用顶点颜色,我会得到相同的结果;稍微暗淡的红色和Alpha组件。
还有一件事,Red和Aplha频道被“调光”了相同的数量。所以有些东西会导致整个颜色分量变暗。正如我在主要问题中所说的,无论是使用着色器还是固定功能管道,都会发生这种情况。
只是为了好玩,我在Windows中使用DirectX进行了类似的测试,结果产生了红色组件254的矩形;仍然略微变暗,但几乎没有。
请问我可以知道你看到的值~96988。 我想这是非常正常的浮点值。 – 2012-01-11 21:45:53
你有合成器吗?如果是这样,请确保它不是通过插件或其他东西与您的窗口输出玩游戏。 – genpfault 2012-01-11 21:52:05
司机是否有伽玛设置? – 2012-01-11 23:11:40