2012-06-20 21 views
4

我想了解three.js的座標空間,我明白有object.matrix和object.matrixWorld。手動應用旋轉和平移到THREE.JS的Matrix4

在絆倒這篇博文Matrix Basics. How to step away from storing an orientation as ’3 angles’之後,我決定嘗試學習如何手動操作Matrix4的屬性,從而避免使用歐拉旋轉。

我想要做的就是將我的立方體從原點0,0,0轉移出來,然後在世界空間中旋轉它。我腦海中的結果是,立方體首先在y軸上轉換,然後旋轉將它帶入一個大圓弧回到平面,但實際發生的只是回到忽略翻譯的原點。

我一直在做很多關於向量和矩陣的閱讀,我相信我現在足夠了解他們背後的理論。我沒有真正得到的是three.js如何處理matrixWorld和matrix。我試過兩個!

這裏是展示一個小提琴:http://jsfiddle.net/SCXNQ/151/

只要看看在渲染()函數來查看什麼,我試圖做的!

編輯 - 工作[解決]更新JS FIDDLE版本14/09/12

與下面的答案的幫助,我想我會後我的更新小提琴證明什麼,我想實現 - http://jsfiddle.net/SCXNQ/363/

+0

就像在旁邊一樣,在這裏可能無法幫到你,因爲我只是簡單地看了一下Three.js,但如果你在看3D旋轉,你應該對四元數以及矢量和矩陣。 – phenomnomnominal

+0

@phenomnomnominal - 是的,因爲three.js實現了Quats。我想我會學會在我跑之前走路:) – Neil

回答

2

看看this,這是我認爲你想要的。

編輯: 哎呀,得到了矩陣次序錯誤(即你需要有紮實抓好另一件事) - >嘗試this以及。

+0

我讀了關於將東西應用於矩陣的順序,感謝您指出了這一點,make函數又有什麼意義,例如:makeTranslation而不是使用translate? – Neil

+0

我快速查看了源代碼,看起來makeTranslation在物理上將「Matrix」更改爲任何您提供的內容,而translate對現有的「Matrix」執行翻譯操作。我想不出爲什麼你會完全覆蓋一個Matrix對象而不是創建一個新對象的任何特殊原因,可能作爲內存優化有一些價值? – phenomnomnominal

+0

我明白了,非常感謝您的幫助,我現在正在從大多數矩陣運算中獲得我期望的結果。 – Neil