2014-05-16 180 views
3

定位攪拌機動畫導出我使用three.js所導出實用程序成功導出動畫從攪拌機,並可以將其添加到three.js所一幕:如何使用three.js所

http://jsfiddle.net/frogt/6HxRP/1/

但是,一旦我將對象添加到場景中,我似乎無法手動定位它。下面是我使用創建從Blender出口網格和動畫代碼:

var callback = function (geometry, materials) { 

     var skinnedMesh = new THREE.Mesh(geometry, new THREE.MeshPhongMaterial({ 
      color: 'green' 
     })); 
     skinnedMesh.receiveShadow = true; 

     THREE.AnimationHandler.add(skinnedMesh.geometry.animation); 

     var animation = new THREE.Animation(skinnedMesh, 
       "ArmatureAction", 
       THREE.AnimationHandler.CATMULLROM 
     ); 

     animation.interpolationType = THREE.AnimationHandler.CATMULLROM_FORWARD; 

     // This positioning doesn't work.... 
     skinnedMesh.position.y = 50; 
     skinnedMesh.position.x = 50; 
     skinnedMesh.position.z = 50; 

     animation.play(); 

     scene.add(skinnedMesh); 

    }; 

,這裏是在攪拌機出口動畫:

"animation": { 
    "name": "ArmatureAction", 
    "fps": 24, 
    "length": 4.125, 
    "hierarchy": [{ 
     "parent": -1, 
     "keys": [{ 
      "time": 0, 
      "pos": [0, -0.998347, -0], 
      "rot": [0, 0, -0, 1], 
      "scl": [1, 1, 1] 
     }, { 
      "time": 2, 
      "pos": [0, 3.92237, -0], 
      "rot": [0, 0, -0, 1] 
     }, { 
      "time": 4.125, 
      "pos": [0, -0.667432, 1.77636e-15], 
      "rot": [0, 0, -0, 1], 
      "scl": [1, 1, 1] 
     }] 
    }] 

動畫的位置似乎被鎖定導出到動畫中的'pos'數組。

我的問題是:如何將動畫添加到我的Three.js場景後手動定位(並移動)?

正在使用three.js所R67

回答

2

我設法找到通過修改three.js所來源的解決方案。裏面的THREE.Animation.prototype.update()方法我更換

vector.x = vector.x + (currentPoint[ 0 ] - vector.x) * proportionalWeight; 
vector.y = vector.y + (currentPoint[ 1 ] - vector.y) * proportionalWeight; 
vector.z = vector.z + (currentPoint[ 2 ] - vector.z) * proportionalWeight; 

var xOrig = this.root.position.x; 
var yOrig = this.root.position.y; 
var zOrig = this.root.position.z; 

vector.x = (vector.x + (currentPoint[ 0 ] - vector.x) * proportionalWeight) + xOrig; 
vector.y = (vector.y + (currentPoint[ 1 ] - vector.y) * proportionalWeight); 
vector.z = (vector.z + (currentPoint[ 2 ] - vector.z) * proportionalWeight) + zOrig; 

這僅適用於X軸和Z軸,這是所有我需要爲我的具體應用。但是,這似乎不是解決問題的「正確」方式。