三.JS 如何移动一个 SkinnedMesh 的骨骼?

Posted

技术标签:

【中文标题】三.JS 如何移动一个 SkinnedMesh 的骨骼?【英文标题】:THREE.JS how to move the bones of a SkinnedMesh? 【发布时间】:2013-02-12 06:07:35 【问题描述】:

我正在使用 THREE.JS 开发一个 3D 项目,我想制作一个类似我的世界的简单角色的动画。

为此,我从 Blender 中导出了一个(带有骨骼),然后使用 SkinnedMesh 类使用 THREE.JS 渲染它。

我想尽一切办法让网格的手臂移动,但我不知道该怎么做。我尝试更改旋转、位置、矩阵并将所有标志设置为 true(如 matrixWorldNeedsUpdate 但手臂没有移动)。

这是一个示例代码:

var meshBody = new THREE.SkinnedMesh( geometry, materialTexture );

...

animate = function()
    meshBody.bones[3].rotation.z += 0.1     
    meshBody.bones[3].matrixAutoUpdate = true;
    meshBody.bones[3].matrixWorldNeedsUpdate = true;

【问题讨论】:

【参考方案1】:

在构建网格时,确保材质的蒙皮属性设置为 true,例如:

mesh = new THREE.SkinnedMesh (geometry, 
          new THREE.MeshBasicMaterial (color: 0xaaaa00, skinning: true)
     );

【讨论】:

嗯,当我这样做时,模型消失了。在本教程link 中,它提到使用与顶点组相同的骨骼命名。听起来有点奇怪,但我试过了,没有任何区别...... 好的,我现在知道了。我需要添加多个顶点。 @robhearing 如果您找到了解决方案,您能回答我的问题吗? :) ***.com/questions/60036248/…【参考方案2】:

它默认使用四元数旋转。尝试设置meshBody.bones[i].useQuaternion = false;,然后更改旋转参数或改用quaternions。

【讨论】:

以上是关于三.JS 如何移动一个 SkinnedMesh 的骨骼?的主要内容,如果未能解决你的问题,请参考以下文章

Unity中使用GPU Instancing优化SkinnedMesh渲染

三.js 移动物体时的相机、物体和场景原点

使用Three.js 心得系列一 如何创建三维网格三使用Three.js 心得系列三 Three.js 如何加载GlTF文件

js原生选项卡(包含移动端无缝选项卡)三

如何克隆蒙皮网格?

三 JS - 如何用 Y 平面切割 3D 对象?