【发布时间】:2013-12-24 08:52:05
【问题描述】:
是否可以通过使用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);
});
我使用的模型是用 makeHuman(夜间构建)创建的,导出到 Collada,在 Blender 中导入并导出到 three.js JSON 模型。模型链接如下:
https://www.dropbox.com/sh/x1606vnaoghes1y/gG_BcZcEKd/initial
谢谢!
【问题讨论】:
-
我猜网格需要根据新的骨骼位置进行更新。方法 animation.update() 可能包含答案。否则,我找到了可能有帮助的方法 mesh.updateMorphTargets() 和 Bone.update()...
-
这是否特定于three.js 和 Unity?一些答案似乎表明它是。
标签: javascript three.js