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

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

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

 glColor3ui(0x80000000, 0, 0xFF000000);

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

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

15.12.2008 10:01:34
2 ОТВЕТА

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

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

1
15.12.2008 10:07:12

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

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

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

и не

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

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

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

3
15.12.2008 10:28:22