У меня есть треугольная сетка, у которой нет текстуры, но установлен цвет (вроде синего цвета) и альфа (0,7f). Эта сетка генерируется во время выполнения, и нормали верны. Я обнаружил, что при включенном освещении цвет моего объекта меняется по мере его перемещения по уровню. Кроме того, освещение не выглядит правильно. Когда я рисую этот объект, это код:
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);
РЕДАКТИРОВАТЬ: я много сделал для того, чтобы нормали были «более» правильными (поскольку я сам генерирую поверхность), но цвет объектов все еще меняется в зависимости от того, где он находится. Почему это? Есть ли в openGL какое-то особое смешение окружения, о котором я не знаю?
РЕДАКТИРОВАТЬ: Оказывается, изменение цвета было связано с тем, что предыдущая текстура была в стеке текстур, и хотя она не рисовалась, glMaterialfv сливался с ней.