我有一个三角形网格,没有纹理,但设置的颜色(蓝色)和alpha(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);
编辑:我已经做了很多,使正常人“更”正确的(因为我产生表面自己),但对象的颜色仍然会根据它的位置而变化。为什么是这样? OpenGL是否有一些我不知道的特殊环境? 编辑︰原来的颜色变化是因为以前的纹理是在纹理堆栈,即使它没有被绘制,glMaterialfv与它混合。
但肯定会然后它只能使用GL_FRONT或GL_BACK中的一个......它不会。 – DavidG 2008-11-07 15:18:32