我的代码遇到了“早上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并不像我想象的那样工作 所以我只是添加了另一个矩阵并使用了一些旧的节省。
谢谢!
答案 0 :(得分:1)
您需要做的是从您拥有的角度/轴表示计算旋转矩阵offset
。停止拖动时,需要将此矩阵存储为rotation
对象中的model
。当您再次开始拖动时,首先应用rotation
,然后应用offset
和glMultMatrix
。停止拖动时,将offset
乘以rotation
。伪代码:
rotation
设置为标识。offset
计算glMultMatrix(rotation); glMultMatrix(offset)
。rotation = rotation * offset
。