我在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