2010-08-23 116 views
1

我的项目的简单版本是基于用户输入旋转球体。在OpenGL中实现固定坐标系

但是由于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(); 

回答

2

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

要旋转对象一个位,每次将旋转矩阵乘以方向矩阵。只要确保定向矩阵的所有矢量保持相互垂直。

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

或使用四元数。

我知道这不是一个完整的答案,但是(尽管我已经编写了库和代码来做这件事),但是解释这将花费很多时间。

尝试下载NVidia OpenGL sdk,看看他们在他们的演示中如何处理对象旋转。 也搜索3d定位与谷歌。一些论文应该解释如何使用矩阵存储对象的方向,等等。

并检查euclidianspace.com