在我的openGL項目中,我試圖實現以下目標:讓對象圍繞其原點(在其自己的世界中的(0,0,0)點)旋轉,並同時將其翻譯。我拿出follwing結構:OpenGL在同一時間翻譯和旋轉
/***
Install shader and upload data to openGL, initialize and stuffs...
***/
// transfomration matrix is a global variable
// note the transformation matrix eventually will be right multiplied
// by the vertex data in the vertex shader
void keyboard(){
// Inside this function I capture the keyboard input.
// if rotation key is captured, set the rotation flag
// if translation or scaling key is captured, modify the matrix like this
transformation = glm::translate() * transformation;
}
void paintGL(){
// Inside this function I check if the rotation flag is up and modify the
// model to wolrd transformation matrix. I choose to modify the transform
// matrix here because I can take use of the main loop to let my object
// continuously rotate unless the flag is off.
if(rotation flag is set)
transformation = transformation * glm::rotate() * inverse(transformation)
}
int main(){
glutInit();
glutDisplayFunc(paintGL);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
現在我的問題是,當我只旋轉或只能翻譯或規模,計劃按預期工作。但是,如果我翻譯對象然後按下旋轉,對象將返回到其初始位置,然後旋轉。或者它消失了!
我知道順序很重要,但在我看來,只要我應用逆矩陣,對象應該回到原來的世界,圍繞原點旋轉,然後我可以將其翻譯回來。我的問題是由鍵盤和paintGL的調用序列引起的嗎?有人能給我一些幫助嗎?
在'paintGL'中,你不應該首先逆變換,然後旋轉,然後變換回來嗎? –
@reproduktor是的,這就是我所做的,就像上面寫的那樣。 –
對不起,我的錯誤,我認爲OpenGL以另一種順序應用矩陣。無論如何,如果您在'keyboard'函數中更改翻譯,則您將處理可能已經包含旋轉的變換。嘗試單獨維護轉換轉換,然後在'paintGL'中編寫轉換和旋轉。 –