在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
重現步驟:
- 檢查 「:保持左腳固定測試版。」複選框。
- 嘗試更換「左髖部偏轉」。移動緩慢,平穩。移動得很快,它很乾。
- 取消選中「Keep foot anchored」。
- 舉起「左髖關節」,所以他踢了90度。
- 重新檢查「保持腳錨」。
- 移動「左髖偏航」。事情變得瘋狂,機器人飛走了。
我的問題是它是一個人形機器人。我希望能夠改變哪隻腳「接地」,這樣我就可以模擬步行等等。用手臂確定底座是地面。通過我的模型,軀幹是Object3D層次結構的根源,但將軀幹接地不太有用。 –
爲了澄清,我已經在使用Object3D層次結構並更改子輪轉來設置機器人的姿勢。 –