1

在此处输入图像描述

在图片中你可以看到一个白色的点是光源的位置。右边的物体正确点亮,但左边的没有。

GLfloat LightPosition[] = {0.0f,0.0f,1.0f,0.0};
void render()
{
    ::clearScreen(); // clear screen
    ::camera->update(); //changes matrix for camera

    glPushMatrix();
    glRotatef(x,0,1,0);
    glTranslatef(0,0,1);
    glBegin(GL_POINTS); // draw white dot
    glVertex3f(LightPosition[0],LightPosition[1],LightPosition[2]);
    glEnd();

    glLightfv (GL_LIGHT0,GL_POSITION,LightPosition); // position light
    ::glPopMatrix();

    ::m2->draw(); // draw king chess piece

    ::glPushMatrix();
    glTranslatef(4,0,0);
    m1->draw(); // draw sphere
    ::glPopMatrix();

    glFlush();
    glutSwapBuffers();
}

我知道我只是点亮了两个物体,就好像它们在世界的中心一样,然后我将物体向左平移导致这种效果。我如何解决这个问题并让我的物体正确点亮?

4

1 回答 1

1

您的光源没有位置,它只有一个方向,因此不受平移的影响。另外,对于定向光,顶点处理器不会计算从光源到顶点的方向。

w坐标设置为 1 t 有一个点光源:

GLfloat LightPosition[] = {0.0f,0.0f,1.0f,1.0};
于 2013-08-11T02:31:14.867 回答