我想知道之间有什么区别:
glLightfv(GL_LIGHT0, GL_POSITION, pos);
gluLookAt(...)
和
gluLookAt(...)
glLightfv(GL_LIGHT0, GL_POSITION, pos);
因为对我来说,它看起来非常相似(除非说明顺序)
答案 0 :(得分:2)
l灯光位置矢量将在GL_MODELVIEW
调用时使用当前glLighttv()
矩阵进行变换,以获得光源的眼睛空间位置,用于进行光照计算时渲染基元。所以这些操作的顺序很重要。
你的代码片段非常小。让我们假设当前的模型视图矩阵只是身份。在这种情况下,第一个变体将导致光位置直接设置在眼睛空间中。因此,当相机移动时,光源实际上会移动,光线和相机的相对位置始终保持不变。
后一种变体将根据gluLookAt()
设置的当前视图矩阵设置灯光位置。如果移动相机,光线和相机的相对位置会发生变化,所产生的效果就是光线具有稳定的世界空间位置,例如你实际上可以靠近光源移动。