Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有多个动画的网格_Javascript_3d_Three.js_Blender_Maya - Fatal编程技术网

Javascript 具有多个动画的网格

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) //创建动画

我试图在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)
//创建动画
对于(变量i=0;i
我有两个问题:

  • (Main)3D对象(以Three.js格式)如何已经具有具有名称的动画?在for循环中,
    “geometry.animation[i].name“
    “walk”、“idle”和“run”
    。我用maya和blender制作了动画(初学者级),但我不知道如何在同一网格上导出多个动画,以及如何命名它们

  • (较少)这是JavaScript语法的问题。为什么
    “var scope=this;”
    ?我试图用
    中的
    “this”
    替换
    中的
    “scope”
    “this”
    “this”
    (范围、几何体、原始材质);”,但这使它不再有效

谢谢你阅读我的问题


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 ] );

        }

        (...)

    } );
};