2012-11-03 148 views
3

我正在嘗試做一個簡單的飛機飛行遊戲。我希望用戶的箭頭鍵將一個平面圍繞一個360度的區域進行旋轉,其中上下是一個相對的Y軸,與飛機的水平位置相對。左右箭頭應該圍繞它的z軸旋轉平面,並允許其具有新的Y軸位置。我的問題是 - 我怎樣才能在相對於新的水平位置的Y軸上旋轉飛機?Three.js飛機的3D旋轉

我有一個叫做飛機的組,並且做了像airplane.rotation.z(左右)和airplane.rotation.x(上下)的東西 - 但是x軸不是沿着新的水平線平面。我也嘗試使用airplane.children [1] .matrix.rotation.x訪問組內的模型/網格,以查看這是否可以改變相對的Y軸...然而,這會導致相同的問題。我如何找到相對的Y軸到它當前的水平位置?

我的代碼就可以看出jsfiddle here

任何幫助將不勝感激。

+0

按Ctrl-F'':?不匹配。目前,你的問題(幾乎)是一個巨大的文本牆,考慮重組並更好地格式化它。明確*問題究竟是什麼。 – phant0m

+2

@ phant0m - 簡化了問題。對不起,如果它之前不清楚。 – Robbie

+0

你能在jsfiddle.net中設置一些東西來展示你的問題嗎? – Neil

回答

4

非常坦率地說,我在理解你的問題時非常困難,但我認爲你的問題是:「我如何使用箭頭鍵來旋轉圍繞它的內部z軸或x軸的對象?

像這樣的程序,將做到這一點:

var _q1 = new THREE.Quaternion(); 

function rotateOnAxis(object, axis, angle) { 

    _q1.setFromAxisAngle(axis, angle); 
    object.quaternion.multiplySelf(_q1); 

}  

這個程序使用了四元實施。這真的沒有什麼大不了 - 你只需要設置:

object.useQuaternion = true; 

這裏是更新的小提琴:http://jsfiddle.net/Lc8gH/20/


編輯:您現在可以使用Object3D.rotateOnAxis(axis, angle);

three.js所r.58

+0

這正是我一直在尋找的。對不起,我的語言太混亂了......真的很感謝幫助! – Robbie