Opengl 为什么我的地板多边形不受镜面反射和漫反射光的影响?

Opengl 为什么我的地板多边形不受镜面反射和漫反射光的影响?,opengl,rendering,lighting,Opengl,Rendering,Lighting,我试图用一些简单的物体来照亮一个场景。我有两个灯光,一个聚光灯和一个点光源,灯光在场景中的对象上似乎工作得很好,但是当涉及到纹理地板时,它只受环境影响,我不知道为什么。我认为它和法线有关,我把它定义为我认为应该的,指向上。如果我删除纹理,我会得到相同的结果。 我做错了什么 这是我的密码: void drawFloor() { setMaterial(mat_specularFloor, mat_specularFloor, mat_specularFloor, mat_specularF

我试图用一些简单的物体来照亮一个场景。我有两个灯光,一个聚光灯和一个点光源,灯光在场景中的对象上似乎工作得很好,但是当涉及到纹理地板时,它只受环境影响,我不知道为什么。我认为它和法线有关,我把它定义为我认为应该的,指向上。如果我删除纹理,我会得到相同的结果。 我做错了什么

这是我的密码:

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);
}

我不熟悉固定功能管道,这可以通过使用更新版本的opengl和每像素照明使用着色器来修复。 解决这一问题的一种可能方法是将地板细分,使其由许多较小的部分组成。
由于opengl正在为每个顶点运行一个计算,因此将对灯光进行平均,如果将其细分为每个部分,灯光将对

产生更大的影响。好的,我的灯光的主要问题是,它只是一个巨大的多边形,因为它太大了,我在顶点没有任何灯光,所以什么都没有插入

现在我得到了聚光灯的漫反射照明,但我似乎没有得到镜面反射高光。 甚至可以在平面上获得镜面反射高光吗?
如果是,我还需要做些什么来解决这个问题?我需要使地板看起来有光泽。

当你说它不受影响时:灯光是否静止?绘制地板时,是否启用了
glu照明
?是的,两个灯光都静止,你可以用键盘移动聚光灯。在绘制地板之前,已启用GL_照明。事实上,桌子和茶壶都是在地板的正后方绘制的,它们的照明效果很好。在固定管道中,照明是逐顶点计算的,然后进行插值。因此,如果将地板绘制为一个非常大的四边形,则照明计算仅在拐角处执行,结果将在整个地板上线性插值。桌子的四边形看起来比地板小得多。