如何正确地将转换应用于OpenGL模型

时间:2011-05-03 22:53:15

标签: ipad opengl-es

我一直试图解决这个问题六个月了,并且有一个可行的解决方案,但我无法弄清楚如何让我的模型完全符合我的要求。虽然转换代码与桌面OpenGL的转换代码相同,但我正在为iPad渲染一个带有弧形旋转实现和缩放/平移功能的3D模型。目前,用户可以通过单击模型来更改模型的旋转中心。旋转中心改变,但原点保持静止,导致模型远离用户触摸屏幕的位置。我想要它做的是允许用户触摸模型并使模型保持静止,但让它将原点移动到用户触摸的位置。我不确定执行此操作所需的转换或转换顺序。当前的转换顺序是:

glPushMatrix();
glTranslatef(pan.x, pan.y, 0);
glMultMatrixf(mat); //this is my rotation/scale matrix I get from my arcball class
glTranslatef(-origin.x, -origin.y, -origin.z);
//draw model
glPopMatrix();

知道需要进行哪些更改才能使原点移动而不是模型?

1 个答案:

答案 0 :(得分:0)

乍一看,我会说你应该在应用旋转矩阵之前将场景的原点移动到所需的旋转点,以便沿全局轴发生移位。然后应用旋转矩阵,绘制项目,并将原点移回原始原点以显示其余的显示功能(应该在glPopMatrix中处理)。

glPushMatrix();
glTranslatef(pan.x, pan.y, 0);
glTranslatef(-origin.x, -origin.y, -origin.z);
glMultMatrixf(mat); //this is my rotation/scale matrix I get from my arcball class
//draw model
glPopMatrix();