0

我想知道有什么区别:

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

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

因为对我来说,它看起来几乎一样(除非指令的顺序)

4

1 回答 1

2

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

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

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

于 2013-06-09T22:27:11.970 回答