我在OpenGL中编写了一个简单的应用程序。我有一个模型,我想围绕其中心旋转(局部坐标),然后将其与本地坐标一起翻译。我做了两个场景, 旋转然后翻译,反之亦然。在第一种情况下,我得到的旋转是正确的,但是模型根据世界坐标而不是模型(局部)坐标进行平移。当我首先翻译时,我得到了翻译的权利,但轮换不在模型中心附近。 这里的代码,对象坐标上的旋转和平移
glPushMatrix();
// ignore this
/*glRotatef(_zRoll, 0.0, 0.0, 1.0);
glRotatef(_yTilt, 1.0, 0.0, 0.0);
glRotatef(_xPan, 0.0, 1.0, 0.0);*/
glScalef(scale, scale, scale);
glTranslatef(0.0, 0.0, -2.0);
glTranslatef(_xTranslate, _yTranslate, _zTranslate); // The required translation
// The required rotation
glRotatef(_yangle, 0.0, 1.0, 0.0);
glRotatef(_zangle, 0.0, 0.0, 1.0);
glRotatef(_xangle, 1.0, 0.0, 0.0);
glTranslatef(coord.x, coord.y, coord.z); // translate to the model center
glCallList(aHelix);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glPopMatrix();
glutSwapBuffers();
*插入关于弃用的固定功能管道的标准免责声明*,目前的方法是使用着色器并管理自己的变换矩阵 – 2014-10-02 09:35:57
不清楚你想要做什么以及你的值是什么意思。几个插图或截图与评论会很好。从我能够理解的,你需要先翻译,然后旋转。 – keltar 2014-10-02 11:07:22
@keltar我想要做的事情基本上是将模型与旋转方向一起移动(平移)。例如,如果我将模型向左旋转90度(围绕z轴),然后沿-x轴移动对象,模型应向下移动(根据模型(局部)坐标,而不是按照左移世界坐标 – jouzef19 2014-10-03 07:44:46