在OpenGL中实现固定坐标系

时间:2010-08-23 21:30:50

标签: c++ opengl 3d matrix openframeworks

我项目的简单版本是根据用户输入旋转球体。

然而,由于openGL的局部坐标系,在某些情况下多次旋转后我的旋转变得奇怪。 我真正需要的是基于世界/固定坐标系进行旋转。这样,当我旋转球体时,旋转轴也不会旋转。 此问题在此处http://www.opengl.org/resources/faq/technical/transformations.htm在9.070进行了解释。

我理解这一切。然而,设置他们的建议有点超出我的技能水平。有人对这个有经验么?我尝试使用我在这里找到的一些代码 http:// chaosengineer.com/?cat=19 但没有运气。

这是我正在使用的基本代码。

glPushMatrix();

//draw in middle of the screen
glTranslatef(ofGetWidth()/2,ofGetHeight()/2,0);

glRotatef(xRot,1,0,0);
glRotatef(zRot,0,0,1);

glTranslatef(-ofGetWidth()/2,-ofGetHeight()/2,0);

ofSetColor(255, 255, 255, 255);
squirrelModel.draw();
glPopMatrix();

1 个答案:

答案 0 :(得分:2)

您需要将对象方向存储为矩阵。或者作为一组向量(局部X,局部Y,局部Z)。

要稍微旋转对象,每次将方向矩阵乘以旋转矩阵。只需确保方向矩阵的所有向量保持彼此垂直。

在这种情况下,渲染时,你需要使用glMultMatrix而不是glRotate / glTranslate。

或使用四元数。

我知道这不是一个完整的答案,但是(尽管我已经编写了用于执行此操作的库和代码),解释这将花费大量时间。

尝试下载NVidia OpenGL sdk并查看他们如何在演示中处理对象轮换。 还可以使用Google搜索 3d orientation 。有些论文应该解释如何使用矩阵存储面向对象等等。

然后检查euclidianspace.com