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

时间:2015-08-17 20:34:41

标签: opengl rendering lighting

我试图用几个简单的物体照亮一个场景。我有两个灯,一个聚光灯和一个点灯,灯光似乎在场景中的物体上工作正常,但是当它到达纹理地板时它只受环境影响,我无法弄清楚原因。我认为它与法线有关,因为我认为它应该是正确的,指向上方。如果我删除纹理,我得到相同的结果。 我做错了什么?

这是我的代码:

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

enter image description here

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好吧所以我的照明的主要问题是它只是一个巨大的多边形,因为它太大了我没有在顶点得到任何照明,所以没有任何内插。

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