OpenGL:颜色不准确?

时间:2008-12-15 10:01:35

标签: opengl colors pixels

我正在尝试按照此页面上的说明操作:
http://www.opengl.org/resources/faq/technical/color.htm
关于渲染具有唯一颜色的图元

我检查了每种颜色的位数,每个颜色的结果为8 致电:

 glColor3ui(0x80000000, 0, 0xFF000000);

用glReadPixels()读回像素我得到颜色:0xFFFE007F
这对应于R=0x7F, G=0, B=0xFE
红色和蓝色的两个低位是错误的。

为什么?
我正在使用最新驱动程序的戴尔笔记本电脑上使用全新的nVidia卡

2 个答案:

答案 0 :(得分:3)

事实证明,FAQ有一个错误。

documentation of glColor 声明:“无符号整数颜色分量,在指定时,线性映射到浮点值,使最大可表示值映射到1.0(全强度),0映射到0.0(零强度) “
这实际上表明要获得全强度白色我应该打电话:

glColor3ui(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);

而不是

glColor3ui(0xFF000000, 0xFF000000, 0xFF000000);

如常见问题所示。
这就解释了为什么0xFF000000映射到254。

我已经向那些据称维护常见问题的人提交了一份错误报告

答案 1 :(得分:1)

你也做过这个吗?

In either event, you'll need to ensure that any state that could
affect the final color has been disabled. The following code will
accomplish this:

glDisable (GL_BLEND); glDisable (GL_DITHER);
glDisable (GL_FOG); glDisable (GL_LIGHTING);
glDisable (GL_TEXTURE_1D); glDisable (GL_TEXTURE_2D);
glDisable (GL_TEXTURE_3D); glShadeModel (GL_FLAT); 

同时检查glReadPixels缓冲区是否有24/32位。