亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Three.js 中以編程方式創建骨架

在 Three.js 中以編程方式創建骨架

飲歌長嘯 2023-11-12 15:22:40
我正在 Three.js 中加載機構模型(例如機器人手臂)。遺憾的是,我使用的模型沒有骨架,但我有關節的位置、軸等。為了使用諸如 Three-IK 之類的逆運動解算器,我想根據這些參數創建一個骨架。由于我想使用許多不同的模型,因此我寧愿不手動創建骨架,而是用代碼創建骨架。我已經嘗試了一個多星期,根據這些反映模型的值創建有效的骨骼結構,但沒有成功。例如,如果我使用關節的位置創建骨骼鏈,我會得到一個非常長的骨架,它與我使用的位置完全不匹配。let boneParent;let bonepos = [];let bones = [];model.traverse(child => {? ? switch(child.type) {? ? ? ? case "joint":? ? ? ? ? ? let p = new Vector3();? ? ? ? ? ? child.getWorldPosition(p);? ? ? ? ? ? bonepos.push(p);? ? ? ? ? ? let bone = new Bone();? ? ? ? ? ? boneParent && boneParent.add(p);? ? ? ? ? ? bone.worldToLocal(p.clone());? ? ? ? ? ? bone.position.copy(p);? ? ? ? ? ? bone.rotation.copy(child.rotation);? ? ? ? ? ? bone.scale.copy(child.scale);? ? ? ? ? ? boneParent = bone;? ? ? ? ? ? bones.push(bone);? ? ? ? ? ? break;? ? }});showPoints(scene, bonepos, 0xff0000);const skeletonHelper = new SkeletonHelper(bones[0]);skeletonHelper.visible = true;scene.add(skeletonHelper);上面的代碼產生下面的屏幕截圖。紅色標記是我從機器人關節獲得的位置,蜿蜒延伸到遠處的線是 SkeletonHelper 可視化的骨架。所以我的問題是:我似乎不太了解 Three.js 中如何處理骨骼。如何創建一個從關節位置和方向反映現有模型的骨架?提前致謝!對于未來的訪客:?Rocksi 是開源的!
查看完整描述

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()省去了很多矩陣麻煩:)


查看完整回答
反對 回復 2023-11-12
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

child.getWorldPosition(p);

恐怕將世界空間中的位置應用于代表本地Bone.position空間中的位置是不正確的。

骨骼父 = 骨骼;

這條線看起來也有問題。一根骨頭可以有多個子元素。在我看來,您的代碼沒有考慮這個用例。


查看完整回答
反對 回復 2023-11-12
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號