在图片中,您可以看到光源所在的位置有一个白色圆点。右边的物体正确点亮,但左边的物体没有。
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();
}
我知道我只是照亮了两个物体,就好像它们在世界的中心一样,然后我将物体平移到左边导致这种效果。我该如何解决这个问题并让我的物体正确发光?
最佳答案
您的光源没有位置,只有方向,因此不受平移的影响。另外,对于定向光,顶点处理器不会计算从源到顶点的方向。
将 w
坐标设置为 1 t 有一个点光源:
GLfloat LightPosition[] = {0.0f,0.0f,1.0f,1.0};
关于c++照明多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168055/