2012-04-03 98 views
0

使用Android opengl我需要將對象從A點移動到B點,並在同一時間圍繞它的本地Z軸旋轉它。我一直在閱讀過去3天的教程,每個人都會給你提供一些信息和提示,但沒有人能夠爲初學者從上到下地進行解釋。Android openGL對象同時翻譯和旋轉

我知道如何只從A點平移對象到B點。 我也知道如何旋轉點A的對象圍繞其局部軸(其翻譯爲原點,旋轉它,把它翻譯回) 我不知道如何在同一時間旋轉和翻譯。

我試着翻譯成原點,旋轉,翻譯回來,然後轉換到B點。它不起作用,我想我知道爲什麼(旋轉是搞亂了對象軸,所以翻譯到點B不正確)

A(-x1, y1 , -z1) 
B(-x1 + deltaX, y1 + deltaY, -z1 + deltaZ) 
_gl.glTranslatef(x1, -y1 , z1);   
_gl.glRotatef(degrees, x1, -y1 , z1);        
_gl.glTranslatef(-x1, y1 , -z1); 
_gl.glTranslatef(deltaX, deltaY, deltaZ); 

我需要考慮旋轉軸的方式。有人說我可以用quaterninons或旋轉矩陣等來做到這一點。 但我沒有足夠的opengl知識來使用apis來解決這個問題。

有人可以向我解釋這個嗎?還有一些代碼?

預先感謝您。

+0

我不認爲我完全理解你正在嘗試做什麼。請告訴我們更多關於你想要達到的效果 - 在這種旋轉/翻轉效果的現實世界中是否有類比?你是在製作動畫呢,還是一次性的永久性操作?我認爲,如果你只是glLoadIdentity(),然後旋轉,然後翻譯,這應該在這種情況下.. – manmal 2012-04-03 11:01:10

+0

這篇文章的第一句話說:「我需要移動一個對象從A點到B點並旋轉它它的本地Z軸在同一時間「。實時類比是這樣的:我有一架飛機,它的鼻子裏有一個螺旋槳。螺旋槳是一個獨立的物體,需要圍繞其本地z軸旋轉,同時與飛機進行平移。我知道如何只翻譯螺旋槳,我也知道如何在飛機不移動的時候只旋轉螺旋槳,但在同時旋轉和平移時,螺旋槳會採取意想不到的軌跡。 – 2012-04-03 17:55:15

+0

會起作用嗎?:跟蹤某些變量的全局翻譯;當繪製「螺旋槳」時:glLoadIdentity,旋轉,本地翻譯(飛機上螺旋槳的位置),全球翻譯(飛機位置)。 – manmal 2012-04-03 18:34:53

回答

0

如果你有下面的代碼:

glTranslate(x, y, z); 
glRotatef(angle, 0, 0, 1); 
drawObject(); 

對象將首先旋轉它周圍的局部Z軸,然後用(x, y, z)翻譯。最接近繪圖調用的變換調用是首先發生的變換調用。

從你的代碼好像你其實並不想繞它自己的原點的對象,但一些其他的點,在這種情況下,你應該做到以下幾點:

glTranslate(x, y, z);       //Transform 4 
glTranslate(origin.x, origin.y, origin.z); //Transfrom 3 
glRotatef(angle, 0, 0, 1);     // Transform 2 
glTranslate(-origin.x, -origin.y, -origin.z); // Transform 1 
drawObject(); 
+0

「最接近繪圖調用的變換調用是最先發生的變換調用」。這是我在過去3天閱讀論壇中學到的最有價值的信息。我所有的電話都必須以相反的順序。它像一個魅力。非常感謝 – 2012-04-03 19:33:49