У меня есть треугольная сетка, у которой нет текстуры, а цвет набора (вид синего) и альфа (0.7f). Эта сетка генерирует время выполнения, и нормали являются правильными. Я нахожу, что при освещении цвет моего объекта меняется, когда он перемещается по уровню. Кроме того, освещение не выглядит правильным. Когда я рисую этот объект, это код:Проблемы с освещением в OpenGL
glEnable(GL_COLOR_MATERIAL);
float matColor[] = { cur->GetRed(), cur->GetGreen(), cur->GetBlue(), cur->GetAlpha() };
float white[] = { 0.3f, 0.3f, 0.3f, 1.0f };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matColor);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
Другая странная вещь я заметил, что освещение терпит неудачу, когда я отключить GL_FRONT_AND_BACK и использовать только GL_FRONT или GL_BACK. Вот мое освещение установить (делается один раз в начале рендер):
m_lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
m_lightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
m_lightPosition[] = { 0.0f, 1200.0f, 0.0f, 1.0f };
glLightfv(GL_LIGHT0, GL_AMBIENT, m_lightAmbient);
glLightfv(GL_LIGHT0, GL_SPECULAR, m_lightSpecular);
glLightfv(GL_LIGHT0, GL_POSITION, m_lightPosition);
EDIT: Я сделал много, чтобы сделать нормали «более» правильные (т.к. я генерируя поверхность сам), но цвет объектов по-прежнему изменяется в зависимости от того, где он находится. Почему это? Есть ли у openGL какое-то особое смешение условий, о котором я не знаю? EDIT: Оказывается, изменение цвета было связано с тем, что предыдущая текстура находилась в стеке текстур, и хотя он не рисовался, glMaterialfv смешивался с ним.
но, конечно же, он будет работать только с одним из GL_FRONT или GL_BACK ... который он не делает. – DavidG 2008-11-07 15:18:32