OpenGL: неточный цвет? - PullRequest
       22

OpenGL: неточный цвет?

1 голос
/ 15 декабря 2008

Я пытаюсь следовать указаниям на этой странице:
http://www.opengl.org/resources/faq/technical/color.htm
относительно рендеринга примитивов с уникальным цветом

Я проверил количество бит для каждого цвета, и результат составил 8 для каждого.
При звонке:

 glColor3ui(0x80000000, 0, 0xFF000000);

и считывая пиксель с помощью glReadPixels (), я получаю цвет: 0xFFFE007F
что соответствует R=0x7F, G=0, B=0xFE
Два младших бита красного и синего неправильны.

Почему это?
Я использую совершенно новую карту nVidia на ноутбуке Dell с самыми последними драйверами

Ответы [ 2 ]

3 голосов
/ 15 декабря 2008

Оказывается, в FAQ есть ошибка.

Документация glColor утверждает, что: «Целочисленные компоненты цвета без знака, если они указаны, линейно отображаются на значения с плавающей точкой, так что наибольшее представимое значение отображается на 1,0 (полная интенсивность), а 0 - на 0,0 (нулевая интенсивность). «
Это на самом деле говорит о том, что для получения полной интенсивности белого я должен позвонить:

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

а не

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

как подсказывает FAQ.
И это объясняет, почему 0xFF000000 сопоставлен с 254.

Я отправил сообщение об ошибке людям, предположительно поддерживающим FAQ

1 голос
/ 15 декабря 2008

Ты тоже это сделал?

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 бит.

...