我在 OpenGL 中遇到问题,让我的对象(行星)相对于当前相机旋转进行旋转。一开始它似乎可以工作,但是在旋转一点之后,旋转不再正确/相对于相机。
我正在计算屏幕上 mouseX 和 mouseY 移动的增量(差异)。旋转存储在名为“planetRotation”的 Vector3D 中。
这是我计算相对于planetRotation的旋转的代码:
Vector3D rotateAmount;
rotateAmount.x = deltaY;
rotateAmount.y = deltaX;
rotateAmount.z = 0.0;
glPushMatrix();
glLoadIdentity();
glRotatef(-planetRotation.z, 0.0, 0.0, 1.0);
glRotatef(-planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(-planetRotation.x, 1.0, 0.0, 0.0);
GLfloat rotMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, rotMatrix);
glPopMatrix();
Vector3D transformedRot = vectorMultiplyWithMatrix(rotateAmount, rotMatrix);
planetRotation = vectorAdd(planetRotation, transformedRot);
理论上 - 这样做是在“rotateAmount”变量中设置旋转。然后通过将此向量与逆模型变换矩阵 (rotMatrix) 相乘,将其放入模型空间。
然后将此转换后的旋转添加到当前旋转中。
要渲染这是正在设置的转换:
glPushMatrix();
glRotatef(planetRotation.x, 1.0, 0.0, 0.0);
glRotatef(planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(planetRotation.z, 0.0, 0.0, 1.0);
//render stuff here
glPopMatrix();
相机有点摆动,我试图执行的旋转,似乎与当前的变换无关。
我究竟做错了什么?