2011-03-28 184 views
0

我需要在作爲獨立觀察者的沿x,y或z的flex(旋轉)對象之間移動。 相對於x,y的運動工作正常,但是當我沿着z軸走時,觀察者的行爲與對象的xyz系統分開,並且不直接對象,而是以對角線爲例。 下面是一些試用代碼 感謝您的幫助flex,3d物體平移和旋轉

截圖可以在這裏找到http://i.stack.imgur.com/jyuhN.png

var dx1:Number=Math.cos(degToRad(currentZRotation))*xDiff; 
     var dy1:Number=-Math.sin(degToRad(currentZRotation))*xDiff; 
     var dy2:Number=Math.cos(degToRad(currentZRotation))*yDiff; 
     var dx2:Number=Math.sin(degToRad(currentZRotation))*yDiff; 
     xDiff=dx1+dx2; 
     yDiff=dy1+dy2; 
     var xyx:Number=Math.cos(degToRad(currentYRotation))*xDiff; 
     var aux:Number=Math.sin(degToRad(currentYRotation))*xDiff; 
     var xxy:Number=Math.sin(degToRad(currentXRotation))*aux; 
     var xxz:Number=Math.cos(degToRad(currentXRotation))*aux; 
     var yxz:Number=-Math.sin(degToRad(currentXRotation))*yDiff; 
     var yxy:Number=Math.cos(degToRad(currentXRotation))*yDiff; 
     var zyz:Number=0; 
     var zxy:Number=0; 
     var zyx:Number=0; 
     zxy=sign(Math.cos(degToRad(currentYRotation)))*Math.sin(degToRad(currentXRotation))*zDiff; 
     aux=Math.cos(degToRad(currentXRotation))*zDiff; 
     zyx=-sign(Math.cos(degToRad(currentXRotation)))*Math.sin(degToRad(currentYRotation))*aux; 
     zyz=Math.cos(degToRad(currentYRotation))*aux; 
     currentX += xyx+zyx; 
     currentY += yxy+zxy+xxy; 
     currentZ += zyz+xxz+yxz; 
+1

不是你的問題的答案,但我強烈建議抓住一本關於3D圖形的好書並閱讀變換矩陣。從長遠來看,它將爲您節省很多麻煩。 – 2011-03-28 11:36:02

+0

我建議提供一些你想要它的截圖以及它的實際內容。並且可能是一個可運行的應用程序,所以我們很容易測試。 @Rob瓊脂你有任何書的建議? – JeffryHouser 2011-03-28 11:49:05

+0

@ www.Flextras.com Alan Watt的3D計算機圖形學是我在研究這些概念時的首選,但是那是前一段時間:\ – 2011-03-28 12:06:53

回答

0

等待,你實現自己的基本的3D引擎?爲什麼不使用其中一個已經完成所有這些工作的開源代碼?像Yogurt,Alternativa(我的個人偏好)或Away3d

另外,僅僅從查看你的代碼,我可以說你過分複雜的問題了很多。如果我是你的話,我會更關注矢量,而不是用度數計算(相信我),然後研究像Rob提到的矩陣。這也可能都在你的頭上(Fisix很難:P),所以我的建議是使用預製3d引擎。

+0

謝謝:)爲了學習的緣故,我想嘗試在不添加3d引擎的情況下實現此功能。所以回到幾何。 – gabi 2011-03-28 16:07:38

+0

再次,不要使用幾何。這不是物理學的工作原理。他們使用矢量。你可以嘗試學習這種方式,但你已經走錯了方向。你也應該嘗試學習如何提高你的動作表現。你可能想看看其他引擎,因爲它們是開源的,並且知道如何進行轉換。 – 2011-03-28 16:11:49