有什么方法可以将网格附加到骨骼上吗?例如,我加载了动画 .js Angular 色,我想将武器附加到它的手上。
最佳答案
在 Bone 和 Object3D 原型(prototype)上使用一些简单的 hack 是可能的。由于骨骼继承自 Object3D,它们可能有子对象,所以我们可以轻松地 .add() 一个网格到任何骨骼。
但是,SkinnedMesh 只会对非 Bone 子对象调用 updateMatrixWorld(),对 Bone 子对象调用 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);
关于javascript - Three.js 将对象附加到骨骼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031198/