2015-01-09 74 views
0

我試圖在Three.js中理解這個例子:http://threejs.org/examples/#webgl_animation_skinning_blending。這部分代碼(BlendCharacter.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 ]); 

     } 

     (...) 

    }); 
}; 

我有兩個問題:

  • (主)如何在3D對象(three.js所格式)已經與名動畫?在for循環中,"geometry.animation[i].name""walk", "idle" and "run"。我用maya和blender(初學者級別)製作了動畫,但我不知道如何在同一個網格上導出多個動畫,以及如何命名它們。

  • (更少)這是一個JavaScript語法問題。爲什麼"var scope = this;"?我試圖用"this"代替"scope""THREE.SkinnedMesh.call(scope, geometry, originalMaterial);",但這使它不再有效。

感謝您閱讀我的問題!

PS:對不起,我的英語...

+0

您的(較少)問題在SO中被多次回答。例如這裏:http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean-in-javascript和在這裏:http://stackoverflow.com/questions/5355041/in-javascript-爲什麼使用-VAR - 這,這。你應該閱讀JavaScript的範圍。 –

+0

@Bob Woodley謝謝你回答我。 – Koala1

+0

而@邁克爾Zucchetta糾正我的英語:) – Koala1

回答

2

(主)問題:當你使用攪拌機,如果你創建一個動畫,它會自動爲動畫創建了一個名字,你可以改變動作的名稱編輯。現在可以導出網格的多個動畫。在JavaScript代碼中,您可以通過id(geometry.animations [id])調用每個動畫。

+0

是的,我花了一段時間才發現這一點。我看到很多項目,他們只有一個動畫,但可以在「/examples/models/skinned/marine/marine_anims_core.blend」(在github上下載three.js代碼)中找到這個在blender中的項目。一旦打開,您可以在動作編輯器菜單中輕鬆找到。祝你好運! – mk2