2017-10-11 653 views
0

在Three.js中,調用action.play()使對象消失,控制檯上沒有任何錯誤或警告。Three.js調用clipAction.play()使動畫對象消失

我使用THREE.ObjectLoader加載在攪拌機中創建的JSON文件。 srt(位置/比例/四元數)動畫位於生成的文件中。形態目標也是如此。爲了優化文件大小,我將srt作爲一系列空對象進行動畫處理。形態目標軌道位於主要目標中,我克隆5次以建立角色(確切地說是氣球)。

我以前做過大量的測試來介紹形狀/變形動畫。成功後,我確定了所有的動畫。只有被消失的模型所支配。 srt(位置/比例/四元數)動畫以前工作正常。但是在重構代碼之後,在調用action.play()時要少些間諜。那時對象就消失了。迴應混音器和包含剪輯的陣列,一切都看起來是正確的(即我看到的軌道,名稱是正確的等)。同時檢查新生成的JSON,它看起來是一樣的和正確的(也沒有改變SRT動畫,只引入了動畫)

所以我迷路了,覺得這看起來越來越像一個bug。從以往的經驗來看,我確實知道它的工作原理(或已經工作)。

我創建了一個的jsfiddle:https://jsfiddle.net/oompol/3ya6sqed/

[編輯]我打開action.play並調用該函數從DIV [/編輯]鏈接,請注意我註釋掉調用action.play()。所以你看到負載和初始化工作。請參閱以下的功能

function playScene(scene) { 
    for (parentName in srtMixers) { 
    var clpName = "balloon1_fly"; 
    var clp = THREE.AnimationClip.findByName(animLib, clpName); 
    var action = srtMixers[parentName].clipAction(clp); 
    action.clampWhenFinished = true; 
    console.log("playScene:", clpName, clp, parentName, srtMixers); 
    //this is when the problem happens 
    action.play(); 
    } 
} 

上市這是我加載JSON: https://rawgit.com/bakajin/2e3d2f6a722103ed4aefd76f6250ec08/raw/28cad35c20060d478499c0cd40a2753611993720/oomp-scene_balloons-oomp-6.9.4.json

+0

如果場景導出爲'window.fgScene = fgScene',然後在開發工具檢查它,你可以看到的位置/旋轉/縮放和有鱗向上的' 1000872413286' ......這似乎是可疑的? –

+0

他們是?!不知道你的意思是由window.fgScene = fGscene,當你設置。但我知道這些音階不是動畫的。如果他們發生任何事情,它會降低它們1. – bakajin

+0

請參閱[在Google Chrome中檢查jsfiddle.net上的javascript](https:// stackoverflow。COM /問題/ 5655058 /檢查的JavaScript-上的jsfiddle網功能於谷歌鉻)。您可以使用調試器來檢查'scene.children'並查看場景中所有內容的位置和比例。 –

回答

0

好吧,

有一些非常嚴重的問題確實縮放。 Blender的io_three JSON導出程序(r87 dev)在幾何對象中寫入了不正確的矩陣轉換數據(真的很小的縮放值)。帶縮放鍵的動畫軌道正確寫爲1,1,1。所以所有的對象都立即縮小了。

很難看,因爲幾何體沒有單獨的縮放值,而是一個矩陣。在導出時將「場景」設置爲true時似乎會發生。

通過在關鍵幀軌道中輸入縮放值解決了該問題。但是這隻會在你沒有縮放動畫時才起作用(所以鍵都是一樣)。

與此同時,我手工廣泛地編輯了JSON。因爲這不是唯一不正確的數據。動畫對象的格式也是錯誤的。 morphTargetInfluence鍵的持續時間也不正確。這些鍵的格式也不總是正確的。

希望這有助於一些其他的脂肪酶