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