mor*_*is4 11
可以在Bone和Object3D原型上使用一些简单的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);
Run Code Online (Sandbox Code Playgroud)
Three.js版本68开箱即用,但有点不同.不需要更改内部功能.
它现在的工作方式如下:
现在可以在SkinnedMesh的子项中找到骨骼层次结构.
在子列表中找到骨骼,只需将对象附加到它:
player.children[0].add(testObj);
Run Code Online (Sandbox Code Playgroud)
注意:如果您有骨骼层次结构(例如在导出的混合器模型中),那么它也以三个.js表示.如果你的目标骨骼有一个父骨骼,它将如下所示:
player.children[0].children[1].add(testObj);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2586 次 |
| 最近记录: |