1

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

我检查了每种颜色的位数,结果是每种颜色的位数为 8。
调用时:

 glColor3ui(0x80000000, 0, 0xFF000000);

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

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

4

2 回答 2

3

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

glColor的文档 指出:“指定时,无符号整数颜色分量线性映射到浮点值,以便最大可表示值映射到 1.0(全强度),0 映射到 0.0(零强度)。”
这实际上表明,要获得全白,我应该调用:

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

并不是

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

正如常见问题解答所建议的那样。
这就解释了为什么 0xFF000000 映射到 254。

我已经向应该维护常见问题解答的人提交了错误报告

于 2008-12-15T10:28:22.477 回答
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 位。

于 2008-12-15T10:07:12.210 回答