openGL Glut - 使用矩阵乘数的弧形旋转

时间:2013-05-25 01:44:58

标签: opengl graphics glut linear-algebra

我的代码遇到了“早上5点问题”。  我的程序必须显示一个3d模型,我需要使用arcball方法旋转  到目前为止,我计算的一切都很好(我相信......)  接下来我想要发生的是每次我拖动光标(创建矢量)  模型将从原来的位置继续旋转。

我尝试使用getFloatv并使用它,但没有成功 模型不断回到起点。 注意:我在每个函数中都使用了push和pop matrix命令,因此不会乱码 你可以说真正的问题是如何使用这个quatrainon和矩阵乘法 向对方添加旋转 所以有什么遗漏?还是什么都没有放错?

感谢,

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

嘿,谢谢你回答,但我还是有问题 我在旋转完成时尝试仅将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并不像我想象的那样工作 所以我只是添加了另一个矩阵并使用了一些旧的节省。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

  • 初始化:将rotation设置为标识。
  • 拖动时:从轴/角度offset计算glMultMatrix(rotation); glMultMatrix(offset)
  • 停止拖动:设置rotation = rotation * offset