2 回答

TA貢獻2011條經驗 獲得超2個贊
經過一番擺弄,我找到了解決方案:
let root = new Bone();
let parent = root;
let pos = new Vector3();
for (let joint of robot.arm.movable) {
let link = robot.getLinkForJoint(joint);
link.getWorldPosition(pos);
let bone = new Bone();
parent.add(bone);
parent.lookAt(pos);
parent.updateMatrixWorld(); // crucial for worldToLocal!
bone.position.copy(bone.worldToLocal(pos));
parent = bone;
}
重要的部分是在lookAt()之后調用updateMatrixWOrld(),以便bone.worldToLocal()正常工作。還lookAt()省去了很多矩陣麻煩:)

TA貢獻1856條經驗 獲得超5個贊
child.getWorldPosition(p);
恐怕將世界空間中的位置應用于代表本地Bone.position
空間中的位置是不正確的。
骨骼父 = 骨骼;
這條線看起來也有問題。一根骨頭可以有多個子元素。在我看來,您的代碼沒有考慮這個用例。
添加回答
舉報