1
當我按下某個鍵時,需要在一個軸上旋轉場景。以下是我如何實現它在opengl中旋轉物體
int rotateFlag;
void rotateScene(int x){
if(x)//rotate 45 deg on x axis
glRotatef(45,1,0,0);
else // roatate 45 deg on y axis
glRotatef(45,0,1,0);
}
//this is the function I call in glutDisplayFunc
void drawScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//I'm looking at the origin (center of my scene)
gluLookAt (x, y, z, 0,0,0, 0.0, 1.0, 0.0);
rotateScene(rotateFlag);
drawObjects();//draw Objects in Scene
}
我爲rotateFlag賦值,當我按左鍵或向上鍵時。它只旋轉場景一次,因爲我的函數rotateScene 總是將glRotatef應用於我應該避免的場景的原始佈局。有人知道我如何保存旋轉的場景,這樣我就可以對其應用我的功能(旋轉的場景),並且每次按下箭頭鍵時旋轉場景?我希望我明確自己。
我通過增加在X和Y的角度嘗試另一種解決方案,因爲我按下鍵
If keypress left
angleX+=45;
else if keypress up
angleY+=45;
和調整我的rotateScene到
void rotateScene(){
glRotatef(angleX,1,0,0);
glRotatef(angleY,0,1,0);
}
當我個人進行旋轉一切都在朝好的方向發展但是,當我做Y首先旋轉然後我執行旋轉X,場景的旋轉是不正確的。也許這是因爲opengl在Y上旋轉之前首先執行旋轉,因爲函數調用中的順序。我無法正確使用這個功能,因爲在我的應用程序中,旋轉場景的順序非常重要。
旋轉不可交換。簡而言之,這意味着圍繞X旋轉然後圍繞Y旋轉與圍繞Y旋轉Y並不相同。這是一個簡單的數學原理,確實引起了很多混淆。每當你在OpenGL中圍繞一個軸進行旋轉時,座標系都會改變它的方向。另一方面,翻譯不是一個問題 - 首先沿着X,然後沿着Y,然後沿着Z,先翻譯Y,然後沿X翻譯,然後沿着Z翻譯。我們到達空間中的相同點(除非旋轉具有同時應用)。 – rbaleksandar 2014-02-27 09:04:31