2012-01-11 88 views
2

我在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的矩形;仍然略微变暗,但几乎没有。

+0

请问我可以知道你看到的值~96988。 我想这是非常正常的浮点值。 – 2012-01-11 21:45:53

+0

你有合成器吗?如果是这样,请确保它不是通过插件或其他东西与您的窗口输出玩游戏。 – genpfault 2012-01-11 21:52:05

+0

司机是否有伽玛设置? – 2012-01-11 23:11:40

回答

2

我在回答我自己的问题,因为我解决了这个问题,而且我是原因。事实证明,当从二进制转换为浮点时,我错误地计算了模型中顶点的颜色通道,包括alpha。一个愚蠢的错误,引入了这种轻微的暗淡。

例如:

currentColor = m_pVertices[i].clr; // color format ARGB 
float a = (1.0/256) * (m_pVertices[i].clr >> 24); 
float r = (1.0/256) * ((m_pVertices[i].clr >> 16) % 256); 
float g = (1.0/256) * ((m_pVertices[i].clr >> 8) % 256); 
float b = (1.0/256) * (m_pVertices[i].clr % 256); 
glColor4f(r, g, b, a); 

我应该255卫生署进行分割!

似乎唯一的变暗是在我的大脑,而不是在OpenGL。