C++ 在OpenGL中实现固定坐标系

C++ 在OpenGL中实现固定坐标系,c++,opengl,3d,matrix,openframeworks,C++,Opengl,3d,Matrix,Openframeworks,我的项目的简单版本是基于用户输入旋转球体 然而,由于openGL的局部坐标系,在某些情况下多次旋转后,我的旋转会变得很奇怪。 我真正需要的是基于世界/固定坐标系旋转。这样,当我旋转球体时,其旋转轴也不会旋转。 这一问题将在9.070进行解释 我明白这一切。然而,他们建议的设置超出了我的技能水平。有没有人有这方面的经验?我试着使用我在这里找到的一些代码 http://chaosengineer.com/?cat=19 但是没有运气 下面是我正在使用的基本代码 glPushMatrix(); //

我的项目的简单版本是基于用户输入旋转球体

然而,由于openGL的局部坐标系,在某些情况下多次旋转后,我的旋转会变得很奇怪。 我真正需要的是基于世界/固定坐标系旋转。这样,当我旋转球体时,其旋转轴也不会旋转。 这一问题将在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();
您需要将对象方向存储为矩阵。或作为一组向量(局部X、局部Y、局部Z)

若要稍微旋转对象,请每次将方向矩阵乘以旋转矩阵。只要确保方向矩阵的所有向量保持相互垂直即可

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

或者使用四元数

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

尝试下载并查看他们在演示中如何处理对象旋转。 也可以用谷歌搜索3d方向。一些文章应该解释如何使用矩阵存储对象定向,等等

检查