我试图用几个简单的物体照亮一个场景。我有两个灯,一个聚光灯和一个点灯,灯光似乎在场景中的物体上工作正常,但是当它到达纹理地板时它只受环境影响,我无法弄清楚原因。我认为它与法线有关,因为我认为它应该是正确的,指向上方。如果我删除纹理,我得到相同的结果。 我做错了什么?
这是我的代码:
void drawFloor()
{
setMaterial(mat_specularFloor, mat_specularFloor, mat_specularFloor, mat_specularFloor);
//glColor3f(1.0, 1.0, 1.0);
glEnable(GL_TEXTURE_2D);
//glEnable(GL_NORMALIZE);
glBindTexture(GL_TEXTURE_2D, g_Texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//glColor3f(.5, 0.5, 0.7);
glBegin(GL_TRIANGLE_FAN);
glNormal3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-50, 0, -50);
glTexCoord2f(10.0f, 0.0f);
glVertex3f( 50, 0, -50);
glTexCoord2f(10.0f, 10.0f);
glVertex3f( 50, 0, 50);
glTexCoord2f(0.0f, 10.0f);
glVertex3f(-50, 0, 50);
glEnd();
glDisable(GL_TEXTURE_2D);
}
答案 0 :(得分:0)
我不熟悉固定功能管道,这可以通过使用较新版本的opengl并使用着色器进行每像素照明来修复。 解决这个问题的一种可能方法是细分地板,使其由许多较小的部分组成。 由于opengl正在为每个顶点运行一个计算,你的光被平均掉,如果你要将每个部分细分,那么光会对它产生更大的影响
答案 1 :(得分:0)
现在我得到了聚光灯的漫反射光,但我似乎没有得到镜面反射。 甚至可以在飞机上获得镜面高光? 如果是这样,我还需要做些什么来解决这个问题?我需要让地板看起来有光泽。