2012-12-26 60 views
4

我想使用three.js在webgl中製作一個rubik多維數據集遊戲(你可以試試here)。 我有問題要檢測女巫軸,我必須根據立方體的旋轉來旋轉我的立方體。例如,如果立方體處於原始位置/旋轉,如果我想從左到右旋轉左層,我必須在Y軸上旋轉。但是我在Y軸上旋轉了90度的立方體,我不得不在Z軸上旋轉它以將我的左層從下往上旋轉。如何找到魔方的方向?

我試圖找到一種方法來根據立方體的方向獲得正確的旋轉軸。 現在我檢查魔方向量的立方體的旋轉矩陣是最平行的向量(0,1,0),如果我想從一個前面層向下移動。但它不工作在邊緣情況是這樣,例如:

cube orientation

我想有一些簡單的方法來做到這一點,但我不是在基質和數學的東西:)

+0

如果您標記軸_x_,_y_,_z_並編輯您的問題以使用這些代替「左」,「下」等,這將有所幫助。另外,對於旋轉,使用「CW」和「CCW」 「,假定繪製的軸線是正方向的。就目前而言,你的描述很模糊。 –

+4

當您拖動鼠標時,您可能需要考慮的一件事就是使用類似「TrackballControls」的東西。 (或者編寫你自己的版本。)這樣,移動的是_camera_,並且立方體本身保持與全局座標軸平行。這樣,旋轉更簡單。此外,設置背景爲黑色看起來更好,恕我直言。 :-) – WestLangley

+0

您可以像@WestLangley所說的那樣控制攝像頭,或者您可以將您的單個rubik片段添加到父對象3D,然後使用您的控件。這樣,當你將變化應用到各個部分時,它將在父對象3D中本地化,所以它們應該始終具有其默認(易於使用)的方向......至少我認爲是這樣,這是我已經完成的與[this](http://0xor1.com/Sudoku)。 – 0xor1

回答

0
不夠好

AxisHelper可以顯示您可以確定方向的場景的aixs。

var axishelper = new THREE.AxisHelper(40); 
axishelper.position.y = 300; 
scene.add(axishelper); 

你也log多維數據集,並檢查positionrotation性能與Chrome開發者工具或Firebug的。

0

您可以將每個立方體的方向存儲在其自己的4x4矩陣(即「模型」矩陣)中,告訴您如何從立方體的本地座標到世界座標。現在,由於您要將立方體旋轉到世界座標中的軸(即矢量),您需要將該軸轉換爲立方體座標。這正是模型矩陣產生的的逆