2015-06-19 59 views
1
  1. 我SEA3D格式
  2. 在three.js所加載
  3. 骨旋轉具有初始值導出一個被操縱的角色從3ds max中。當我把這些XYZ值0,0,0我的模型看起來完全從攪拌機搞砸

型號的骨頭都爲0,0,0three.js所導入與骨架的角色從3ds max中

All messed up

我已經初始值試圖首先將模型導出爲FBX格式,然後導入攪拌機,然後導出爲JSON格式。有效!不幸的是,這造成了其他問題和太多的步驟。另外Sea3d格式比JSON小得多,我在整個項目中都成功地使用了這種格式。

此外,我嘗試使用SEA3D工作室http://sea3d.poonya.com/studio/爲每個骨骼設置「反向綁定矩陣」旋轉爲0,0,0,這對初始位置有幫助,但與車軸順序無關。

如果我對矩陣的知識會超過0,我會創建一個腳本來重置每個負載模型,但這是我需要幫助或者幫助從3ds max導出,因此初始旋轉值爲0並且軸是按照正確的順序

+0

在three.js中評論此行後,我有了很大的改進! bone.quaternion.set(q [0],q [1],q [2],q [3]); – Pawel

回答

0

經過無數的試驗和錯誤試驗來中斷設置骨骼的初始旋轉值後,我發現在SEA3D加載器中編輯這段代碼完成了這項工作。

THREE.SEA3D.prototype.flipMatrix = function(mtx) { 
    var mtx_data = THREE.SEA3D.BUFFER0.copy(mtx); 

    mtx.setPosition(THREE.SEA3D.VECZERO); 
    mtx.multiplyMatrices(THREE.SEA3D.BUFFER1.makeRotationAxis(THREE.SEA3D.VECBUF0.set(0, 0, 1), THREE.Math.degToRad(180)), mtx);  
    mtx.makeRotationFromQuaternion(THREE.SEA3D.QUABUF0.setFromRotationMatrix(mtx)); 

    var pos = THREE.SEA3D.VECBUF0.setFromMatrixPosition(mtx_data); 
    pos.z = -pos.z; 
    mtx.setPosition(pos); 

    return mtx; 
} 

正是這條線:

mtx.makeRotationFromQuaternion(THREE.SEA3D.QUABUF0.setFromRotationMatrix(mtx)); 

應改爲:

mtx.makeRotationFromQuaternion(new THREE.Quaternion(0, 0, 0, 1)); 

這不是一個解決方案,但解決方法,所以如果你有一個真正的解決方案(如何正確從3ds max導出或在加載後處理它),然後不要猶豫,發佈!