在 OpenGL 中实现固定坐标系

Posted

技术标签:

【中文标题】在 OpenGL 中实现固定坐标系【英文标题】:Implementing a Fixed Coordinate system in OpenGL 【发布时间】:2010-08-23 21:30:49 【问题描述】:

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

但是,由于 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】:

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

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

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

或者使用四元数。

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

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

然后检查euclidianspace.com

【讨论】:

以上是关于在 OpenGL 中实现固定坐标系的主要内容,如果未能解决你的问题,请参考以下文章

openGL按照载体自身坐标系旋转

js中实现高德地图坐标经纬度转百度地图坐标

使聚光灯静止

OpenGl 坐标转换

OpenGL 光照位置固定在不想要的位置

在 OpenGL ES 2 中实现 VBO 以渲染精灵