Javascript 具有多个动画的网格
我试图在Three.js中理解这个示例:。我对这部分代码(BlendCharacter.js文件)有一些问题Javascript 具有多个动画的网格,javascript,3d,three.js,blender,maya,Javascript,3d,Three.js,Blender,Maya,我试图在Three.js中理解这个示例:。我对这部分代码(BlendCharacter.js文件)有一些问题 this.load=函数(url,onLoad){ var范围=此; var loader=new THREE.JSONLoader(); loader.load(url、函数(几何体、材质){ var originalMaterial=材料[0]; originalMaterial.skining=真; skindmesh.call(范围、几何、原始材料);//问题(2) //创建动画
this.load=函数(url,onLoad){
var范围=此;
var loader=new THREE.JSONLoader();
loader.load(url、函数(几何体、材质){
var originalMaterial=材料[0];
originalMaterial.skining=真;
skindmesh.call(范围、几何、原始材料);//问题(2)
//创建动画
对于(变量i=0;i
我有两个问题:
- (Main)3D对象(以Three.js格式)如何已经具有具有名称的动画?在for循环中,
是“geometry.animation[i].name“
。我用maya和blender制作了动画(初学者级),但我不知道如何在同一网格上导出多个动画,以及如何命名它们“walk”、“idle”和“run”
- (较少)这是JavaScript语法的问题。为什么
?我试图用“var scope=this;”
(范围、几何体、原始材质);”,但这使它不再有效中的
替换“this”
“this”中的
“this”“scope”
PS:对不起,我的英语…(主要)问题:当您使用Blender时,如果您创建动画,它会自动为动画创建名称,您可以在“动作编辑器”(action editor)上更改名称。现在可以为网格导出多个动画。在javascript代码中,您可以通过id(geometry.animations[id])调用每个动画。您的(less)问题在SO中得到了多次回答。例如这里:和这里:。你应该仔细阅读javascript中的作用域。@Bob Woodley谢谢你回答我。还有@Michael Zucchetta,谢谢你纠正我的英语:)是的,我花了一段时间才发现这一点。我看过很多项目,它们只有一个动画,但blender中的这一个可以在“/examples/models/skinned/marine/marine\u anims\u core.blend”(在github下载三个.js代码)。打开后,可以在“动作编辑器”菜单中轻松找到。祝你好运
this.load = function ( url, onLoad ) {
var scope = this;
var loader = new THREE.JSONLoader();
loader.load( url, function( geometry, materials ) {
var originalMaterial = materials[ 0 ];
originalMaterial.skinning = true;
THREE.SkinnedMesh.call( scope, geometry, originalMaterial ); // QUESTION (2)
// Create the animations
for ( var i = 0; i < geometry.animations.length; ++i ) {
var animName = geometry.animations[ i ].name; // QUESTION (1)
scope.animations[ animName ] = new THREE.Animation( scope, geometry.animations[ i ] );
}
(...)
} );
};