2012-11-17 32 views

回答

4

原因有兩個,是因爲矩陣乘法必須以某種順序完成才能達到正確的結果(正如您可能已經知道的那樣)。

翻譯/旋轉/縮放的順序在您輸入時按反轉順序完成。

所以,如果你做這樣的事情:

Camera.rotate(15, 0, 0); 
Camera.scale(.5f, .5f, .5f); 
Camera.translate(70, 70, 70); 

你第一平移70,70,70然後用50%在所有方向縮放,旋轉,然後繞X軸15度。

所以Matrix有一個預先和後期翻譯(好,預先和後期的一切),因爲也許你想實際上先旋轉它15度然後翻譯它,然後最終縮放它。

這樣回答前後翻譯。現在相機有一個直線旋轉和平移的原因是知道它如何工作的人(就像我!),所以我從來不使用矩陣或相機,因爲我可以直接在畫布上做旋轉和平移。只要你知道翻譯,縮放和旋轉是以相反的順序完成的,你也可以。另外,如果你知道我告訴你的話,它會給你更多的力量。您可以執行10個矩陣的序列,而不必將它們包圍在每個矩陣對象的多個矩陣對象中(例如,您要執行向外擺動和圍繞中心旋轉以模擬離心力的擺動運動)。這需要通過多次旋轉和平移(被多個Matrix對象包圍在一起),但是如果您知道每個翻譯的工作方式,您可以簡單地執行一系列.translate(),.rotate(),和.scale()。

如果你曾經做過3D圖形,這些信息特別有用,因爲那是當這些矩陣讓人頭疼的時候。

我希望這有助於!

+1

你是否引導我找到一個你已經發現這個事實的文檔? – hasanghaforian

+0

你能否給一個支持你的答案的鏈接? –

+0

哦,我的。我寫這篇文章已經很長時間了,至少可以說是傲慢自大的。該文檔可以在維基百科上找到,具體如下: http://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations 「請注意,乘法是按照與英語句子相反的順序完成的:」跟隨的矩陣由B「是BA,而不是AB」。 –

1

如果您即不碰畫布,但將相機旋轉90度的視角或保持相機靜止不動,但其旋轉-90度的視角看畫布的結果將是視覺上是相同的。

+1

你是否知道有關3D中'Android.Canvas'的好文檔或教程?似乎是'Magic'和'surd'。 – hasanghaforian