Fab*_*chi 15 javascript three.js
是否可以通过使用three.js将变换应用于3D模型的骨骼来创建动态动画?我尝试移动和旋转SkinnedMesh的骨骼,但网格没有更新.
loader = new THREE.JSONLoader();
loader.load('/JS-Projects/Virtual-Jonah/Modelos/initialPose.js',function jsonReady( geometry )
{
mesh = new THREE.SkinnedMesh( geometry, new THREE.MeshNormalMaterial({skinning : true}) );
mesh.scale.set( 10, 10, 10 );
mesh.position.z = mesh.position.y = mesh.position.x = 0;
mesh.geometry.dynamic = true;
scene.add( mesh );
var index = 0;
for (var i = 0; i < mesh.bones.length; i++)
{
if (mesh.bones[i].name == "forearm_R")
{
index = i;
break;
}
}
setInterval (function ()
{
mesh.bones[index].useQuaternion = false;
mesh.bones[index].position.z += 10;
mesh.bones[index].matrixAutoUpdate = true;
mesh.bones[index].matrixWorldNeedsUpdate = true;
mesh.geometry.verticesNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
renderer.render(scene, camera);
}, 33);
renderer.render(scene, camera);
});
Run Code Online (Sandbox Code Playgroud)
我使用的模型是使用makeHuman(每晚构建)创建的,导出到Collada,在Blender中导入并导出到three.js JSON模型.该模型的链接如下:
https://www.dropbox.com/sh/x1606vnaoghes1y/gG_BcZcEKd/initial
谢谢!
小智 14
是的你可以!你需要设置mesh.skeleton.bones[i],mesh.skeleton.bones[i].rotation和mesh.skeleton.bones[i].position.轮换是类型Euler.位置是类型Vector3.我实际上使用我的代码来测试这个https://github.com/lucasdealmeidasm/three-mm3d(其中包括一个带有骨骼可附着物体的工作蒙皮网格),其中一个确实可以做到.
请注意,Inateno的答案是非常错误的,有许多情况需要这样做.例如,在FPS中,使用动态和非动态动画.当一个角色运行并持枪时,他指向枪的方向是动态设置的(可以使用mesh.skeleton.bones [i] .rotation,其中"i"是分配给该臂的骨骼的索引)动画的其余部分,包括步行,在编辑器中制作并加载.可以在three.js中使用"THREE.AnimationHandler.update(delta);" 然后在代码中更改单个骨骼的位置和旋转以解决这些问题.