OpenGL颜色/ alpha输出略微变暗

我在Linux中看到来自OpenGL的颜色/ alpha输出稍微变暗。 而不是看到1.0的红色分量值,我看到〜.96988。 例如,我有一个完全红色的矩形(红色组件= 1.0,alpha = 1.0,绿色和蓝色是零)。 无论是否启用我的顶点/片段着色器,都会发生调光。

照明被禁用,因此在颜色计算中不应包含环境光或其他光。

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,Alpha = 1.0。 没有纹理,使用顶点颜色,我得到相同的结果; 稍微暗淡的红色和Alpha组件。

还有一件事,Red和Aplha频道被“调光”了相同的数量。 所以有些东西会导致整个颜色分量变暗。 正如我在主要问题中所述,无论是使用着色器还是固定functionpipe道,都会发生这种情况。

为了好玩,我在Windows中使用DirectX进行了一个类似的testing,结果是红色部分为254的矩形。 仍然略微黯淡,但只是勉强。

    我正在回答我自己的问题,因为我解决了这个问题,我是原因。 事实证明,当从二进制转换为浮点时,我错误地计算了模型中顶点的颜色通道,包括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。