OpenGL glEnable (GL_COLOR_MATERIAL), за которым следует glDisable (GL_COLOR_MATERIAL) - PullRequest
5 голосов
/ 23 января 2012

Я рисовал одновременно вершинный куб рядом с текстурированным кубом с glDrawArrays() и обнаружил, что при включенном освещении текстурированный куб становится «немного ярче».

После некоторой отладки я обнаружилчто самый первый момент, когда вызывается glEnable(GL_COLOR_MATERIAL), даже если сразу после этого вызывается glDisable(GL_COLOR_MATERIAL), вызывает «немного более яркий» эффект на текстурированном кубе!

Вот краткое описание:

glEnable(GL_COLOR_MATERIAL);
glDisable(GL_COLOR_MATERIAL);
(...)
glDrawArrays(GL_QUADS, 0, n);

Если glEnable(GL_COLOR_MATERIAL) вообще не вызывается, куб отображается желтым цветом.И если вызывается glEnable(GL_COLOR_MATERIAL), даже если за ним следует glDisable(GL_COLOR_MATERIAL), куб становится немного ярче желтого, и я не могу переключиться обратно на «начальный более темный желтый цвет куба».

Подскажите, пожалуйста.мне, если это ожидаемое поведение?

1 Ответ

1 голос
/ 23 января 2012

это не совсем ожидаемое поведение, но его легко исправить.GL_COLOR_MATERIAL позволяет перезаписывать свойства материала цветами вершин.Ошибка заключается в том, что цвета переписываются не только в спецификации цвета вершин, но также и при включении цветового материала (я предполагаю, что это могло быть сделано целенаправленно для предотвращения ошибок).

Все, что вам нужно сделать, чтобысделать ваш куб немного темнее, чтобы восстановить свойства цветного материала по умолчанию (которые, вероятно, были бы рассеянными и окружающими цветами), используя glMaterialfv ().Вы можете найти цвета материала по умолчанию здесь .

...