【发布时间】:2015-08-17 20:34:40
【问题描述】:
我正在尝试用一些简单的物体照亮一个场景。我有两盏灯,一个聚光灯和一个点灯,灯光似乎在场景中的对象上工作正常,但是当涉及到带纹理的地板时,它只受环境影响,我不知道为什么。我认为它与法线有关,因为我将它定义为我认为应该是的,指向上方。如果我删除纹理,我会得到相同的结果。 我做错了什么?
这是我的代码:
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);
}
【问题讨论】:
-
当你说它不受影响时:光是静止的吗?
-
绘制地板时是否启用了
GL_LIGHTING? -
是的,两个灯都是静止的,你可以用键盘移动聚光灯。 GL_LIGHTING 在绘制地板之前启用。事实上,桌子和茶壶是在地板后面画的,它们的灯都很好。
-
在固定管线中,光照是按顶点计算的,然后进行插值。因此,如果您将地板绘制为一个非常大的四边形,则仅在角落执行照明计算,结果将线性插值在整个地板上。
-
桌子的四边形看起来比地板小得多。