OpenGL(Python)中gluLookAt与glRotate顺序影响旋转效果的原因
问题解答
核心原因是OpenGL的矩阵变换是逆序生效的——代码里先写的变换指令,会最后作用到物体(或相机)上,因为OpenGL内部是用矩阵右乘来叠加变换的。
情况1:gluLookAt() 在 glRotate() 之前
- 第一步执行
gluLookAt(5.0,5.0,5.0, ...):把相机固定在(5,5,5)位置,对准原点的立方体,相当于先搭好了一个固定的“相机视角框架”。 - 第二步执行
glRotatef():这个旋转是直接作用在立方体上的,相当于让立方体在固定的相机视角里绕对应轴转,所以你看到的是立方体在旋转。
情况2:glRotate() 在 gluLookAt() 之前
- 第一步执行
glRotatef():这一步是先把整个世界坐标系(包括相机要放的位置)转了个角度。 - 第二步执行
gluLookAt():此时相机是放在旋转后的坐标系的(5,5,5)位置,相当于相机绕着原点的立方体转圈,所以你看到的是相机视角在旋转(立方体不动,视角围着它转)。
简单说就是:
- 先固定相机再旋转:动的是物体
- 先旋转再放相机:动的是相机视角
内容的提问来源于stack exchange,提问作者gaenyang
相关产品推荐
相关产品推荐

