三.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渲染
使用Three.js 心得系列一 如何创建三维网格三使用Three.js 心得系列三 Three.js 如何加载GlTF文件