2013-10-25 50 views
0

在Three.js中,如何讓一個孩子對象保持靜止而改變父對象的旋轉?我有一個多節點機器人模型,其根節點是軀幹(Body_Torso),但我試圖保持腳(Body_RAR)「接地」。顯而易見的方法(計算腳的矩陣變換,並將其應用於軀幹)具有非常奇怪的結果,似乎與時間有關。這是我的代碼:如何在Three.js中「打」一個子對象?

// Hold the foot in place! 
footMatrix = new THREE.Matrix4(); 
footMatrix.copy(hubo.links.Body_RAR.matrixWorld); 

function fixFoot() { 
    // Rotate the whole shebang so that the foot is the "grounded" object. 
    a = new THREE.Matrix4(); 
    a.getInverse(hubo.links.Body_RAR.matrixWorld); 
    b = new THREE.Matrix4(); 
    b.multiplyMatrices(a,footMatrix); 
    hubo.links.Body_Torso.applyMatrix(b); 
    hubo.canvas.render(); 
} 

或某種程度上。 Object3D.applyMatrix()是異步的嗎?我只是得到了很奇怪的結果。如果我只是計算一次,它似乎做的是正確的事情,但如果我嘗試將它連接到一個滑塊,腳的位置會出現很多「抖動」。有時機器人會立即消失。有沒有更好的方法來實現我的目標?

編輯: 下面是一個活生生的例子:http://wmhilton.github.io/hubo-js/examples/sliders/sliders.html

重現步驟:

  1. 檢查 「:保持左腳固定測試版。」複選框。
  2. 嘗試更換「左髖部偏轉」。移動緩慢,平穩。移動得很快,它很乾。
  3. 取消選中「Keep foot anchored」。
  4. 舉起「左髖關節」,所以他踢了90度。
  5. 重新檢查「保持腳錨」。
  6. 移動「左髖偏航」。事情變得瘋狂,機器人飛走了。

回答

1

我可以更容易地使用Object3D層次結構,並改變孩子.rotation屬性,而不是應用矩陣,像這樣的機器人手臂模擬http://dimitriipokrovskii.appspot.com/robot_arm_joints.html

+0

我的問題是它是一個人形機器人。我希望能夠改變哪隻腳「接地」,這樣我就可以模擬步行等等。用手臂確定底座是地面。通過我的模型,軀幹是Object3D層次結構的根源,但將軀幹接地不太有用。 –

+0

爲了澄清,我已經在使用Object3D層次結構並更改子輪轉來設置機器人的姿勢。 –

相關問題