javascript - Three.js 将对象附加到骨骼

标签 javascript three.js webgl

有什么方法可以将网格附加到骨骼上吗?例如,我加载了动画 .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/

相关文章:

javascript - 在 <li> 标签中的文本之间添加可变空格

javascript - 当工具提示组合来自多个系列的数据时,如何以编程方式显示我的图表工具提示? (同步图表)

javascript - 在创建时将 JSON 发送到页面的最佳方式

javascript - 如何在javascript中更新createControl函数输入变量?

javascript - Three.js自定义几何体旋转问题

javascript - Angular 7 - 只有 "dist"文件夹在浏览器上渲染,但使用 NodeJS 则不渲染 "src"文件夹

javascript - 如何从 Three.js 编辑器中添加控件

textures - WebGL 如何用于通用计算(GPGPU)?

javascript - HTML Canvas 嗅探 Webgl 数据

javascript - Three.js - 导入带有纹理的 3d 对象