Когда вы включили glEnable (GL_COLOR_MATERIAL) и изменили цвет с помощью glColor, тогда все ваши текстуры будут затронуты этим цветом.Это связано с тем, что по умолчанию текстура отображается в режиме модуляции (glColor умножается на цвета текстуры).
Если у вас не включено освещение, восстановить исходный цвет текстуры просто - просто установите glColor на белый:glColor4f (1,0, 1,0, 1,0, 1,0).Проблема возникает, когда у вас включено освещение на вашей текстуре.Затем, установка цвета на белый или изменение режима текстуры на REPLACE совсем не поможет - ваши световые эффекты будут удалены!(что, кажется, никто не замечает!) Причина этого заключается в том, что, включив GL_COLOR_MATERIAL по умолчанию, вы получаете поведение, при котором команды glColor изменяют цвета Ambient и Diffuse одновременно - таким образом, будут затронуты ваши свойства ambient и diffuse(потерял).Поэтому все, что вам нужно сделать, чтобы восстановить материальное состояние (и, следовательно, световые эффекты), которое вы имели до применения glEnable (GL_COLOR_MATERIAL), это следующее:
glDisable(GL_COLOR_MATERIAL); //disable color influence
GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; //default material has this ambient color!
GLfloat diffuse[] = { 0.8f ,0.8f ,0.8f, 1.0f }; //default material has this diffuse color!
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); //restore default material ambient color
glMaterialfv(GL_FRONT, GL_AMBIENT, diffuse); //restore default material diffuse color
Обратите внимание, что по умолчанию является окружающими диффузные цвета для материала по умолчанию!Там нет чистого белого!
Таким образом, все текстуры, которые вы используете с этой точки, будут нарисованы так, как задумано (с правильным цветом и световыми эффектами).Мне потребовалось некоторое время, чтобы найти этот материал, поэтому я думаю, что это приятно упомянуть здесь.