有沒有任何方法將網格附着到骨骼上?例如,我加載了動畫.js角色,並且我想將武器附加到它的手上。Three.js將對象附着到骨骼上
9
A
回答
11
可以在Bone和Object3D原型上使用一些簡單的黑客技巧。由於骨骼繼承自Object3D,它們可能有孩子,所以我們可以很容易地將.add()網格添加到任何骨骼。
但是,SkinnedMesh將只調用非骨骼兒童的updateMatrixWorld()和骨頭兒童的update()。此外,骨骼爲其每個孩子調用update()(不管它是否骨骼)。以下片段更改了此行爲:
// modify bone update function to also update its world matrix
// possibly do this only to skeletons you need it for, not for all bones
var update = THREE.Bone.prototype.update;
THREE.Bone.prototype.update = function(parentSkinMatrix, forceUpdate) {
update.call(this, parentSkinMatrix, forceUpdate);
this.updateMatrixWorld(true);
};
// add noop update function to Object3D prototype
// so any Object3D may be a child of a Bone
THREE.Object3D.prototype.update = function() {};
// create buffalo ...
// create a mesh and add it to some bone
var mesh = new THREE.Mesh(new THREE.SphereGeometry(20), new THREE.MeshNormalMaterial());
var bone = buffalo.bones[5];
bone.add(mesh);
8
Three.js版本68處理此開箱即用,但有點不同。 不需要更改內部功能。
現在是這樣工作的:
的骨骼層次現在已經在SkinnedMesh的孩子找到。
查找孩子列表中的骨只需連接對象吧:
player.children[0].add(testObj);
注意:如果你有一個骨骼層次(例如,在導出的攪拌機型號),那麼這三個表示。 js也是。如果你的目標骨骼有一個母骨,它會看起來像這樣:
player.children[0].children[1].add(testObj);
相關問題
- 1. 如何在three.js colladaloader對象中定位骨骼(骨骼動畫)
- 2. Three.js多個骨骼動畫
- 3. Three.js骨骼動畫,bons重新計算
- 4. THREE.JS如何移動SkinnedMesh的骨骼?
- 5. 骨骼(骨)動畫的角度在three.js所稍有不正確
- 6. 上身骨骼檢測
- 7. 將骨骼動畫複製到其他?
- 8. Assimp計算骨骼
- 9. 將子節點/對象附加到three.js中的Object3D中
- 10. Three.js - 剝皮的骨骼網格實例,動畫和混合
- 11. 調整Kinect中的骨骼骨骼位置sdk 1.5
- 12. Kinect V2 SDK 2.0基礎知識,繪製骨骼的骨骼?
- 13. Android OpenGL ES2骨骼動畫子骨骼矩陣
- 14. 更新Three.js骨骼動畫到新的基於混音器的系統
- 15. 出口對象+骨架從攪拌機Threejs和移動骨骼手動
- 16. 骨骼動畫頂點着色器的性能問題
- 17. Three.js將對象移動到一些點上,並看上去
- 18. 將sfDoctrineActAsTaggablePlugin附加到對象
- 19. XNA如何創建骨骼
- 20. Collada和骨骼動畫
- 21. Collada骨骼在客場3D
- 22. OpenGL骨骼動畫性能
- 23. Assimp動畫骨骼轉換
- 24. OpenGL ES2骨骼動畫
- 25. OpenGL骨骼動畫邏輯
- 26. Libgdx spine2d骨骼動畫
- 27. Kinect操縱骨骼數據
- 28. Directx 11骨骼動畫
- 29. 監視骨骼連接池
- 30. AS3骨骼角色動畫
哇。這樣的答案。非常幫助。非常感謝你。哇。 – Gugis