使用矩阵乘法器的圆球旋转



我的代码有一个"早上5点的问题"。我的程序必须显示一个3d模型,我需要使用圆球方法旋转到目前为止,我计算的一切都没问题(我相信……)接下来我想做的是每次我拖动光标(它创建了矢量)模型将继续从它所在的位置旋转。

我尝试使用getFloatv并将其相乘,但没有成功模型不断返回到它的起始点。注意:我在每个函数中都使用了push和pop矩阵命令,所以不会造成混乱你可以说真正的问题是如何使用这个四行符和矩阵乘法使彼此旋转有什么东西不见了吗?或者放错地方了吗?

谢谢,

编辑 :::::::::::::::: 更新代码:

嘿,谢谢你的回答,但是我还有一个问题当旋转完成时,我尝试使用if语句仅多矩阵但是没有连续的旋转,每次

都跳到开始
glGetFloatv(GL_MODELVIEW_MATRIX,_oldRotationsQuatro);
glTranslatef(0.f,0.f,DRAWFARONZAXIS);
glClear(GL_COLOR_BUFFER_BIT |  GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); // Modeling transformation
glLoadIdentity();
glColor3d(1,1,1);
drawObject(model);
glRotated(model->getCurrRotatingAngle(),model->getRotatingAroundVector().getX(),
    model->getRotatingAroundVector().getY(),
    model->getRotatingAroundVector().getZ());
// if (end rotate)
    glMultMatrixf(_oldRotationsQuatro);
drawCamera();
glPopMatrix();

旋转良好,但速度超…

编辑谢谢,我有办法了。glmultmatrix并不完全像我想象的那样工作所以我只是添加了另一个矩阵,并使用了一些旧的储蓄。

谢谢!

你需要做的是从你的角度/轴表示计算一个旋转矩阵offset。当你停止拖动时,你需要将这个矩阵作为rotation存储在你的model对象中。当你开始再次拖动,你首先应用rotation,然后offsetglMultMatrix。当您停止拖动时,将offset乘以rotation。伪代码:

  • 初始化:设置rotation为identity
  • 当拖动时:从轴/角度计算offset, glMultMatrix(rotation); glMultMatrix(offset) .
  • 停止拖动:设置rotation = rotation * offset .

最新更新