gllight和glulookat有什么区别(取决于顺序)

时间:2013-06-09 22:12:35

标签: opengl

我想知道之间有什么区别:

glLightfv(GL_LIGHT0, GL_POSITION, pos);
gluLookAt(...)

gluLookAt(...)
glLightfv(GL_LIGHT0, GL_POSITION, pos);

因为对我来说,它看起来非常相似(除非说明顺序)

1 个答案:

答案 0 :(得分:2)

l灯光位置矢量将在GL_MODELVIEW调用时使用当前glLighttv()矩阵进行变换,以获得光源的眼睛空间位置,用于进行光照计算时渲染基元。所以这些操作的顺序很重要。

你的代码片段非常小。让我们假设当前的模型视图矩阵只是身份。在这种情况下,第一个变体将导致光位置直接设置在眼睛空间中。因此,当相机移动时,光源实际上会移动,光线和相机的相对位置始终保持不变。

后一种变体将根据gluLookAt()设置的当前视图矩阵设置灯光位置。如果移动相机,光线和相机的相对位置会发生变化,所产生的效果就是光线具有稳定的世界空间位置,例如你实际上可以靠近光源移动。