我與three.js結合使用tween.js存在問題。問題是,tween.js動畫的計時器在顯示球體的紋理之前開始。如何判斷tween.js是否等待在three.js中顯示紋理
我正在用Firefox的three.js構建一個全景瀏覽器。全景圖像被映射到一個球體,相機位於其中心。可以改變顯示的全景以虛擬訪問不同的房間(這是通過將不同的紋理變成可見的來完成的)。當房間改變時,用tween.js將光線變成動畫,將房間變暗。然後光線再次上升,並顯示新的全景圖像。
問題是,如果第一次訪問房間,它需要一些時間來顯示圖像。發生這種情況是因爲圖像在顯示之前未被加載到內存中。
如果房間保持黑暗狀態,直到全景圖完全加載到內存並準備顯示,這並不壞。但tween.js的動畫計時器在圖像顯示之前啓動。
結果是,根據需要,光線無法通過動畫慢慢打開,而是需要很短的時間來顯示新的全景圖,然後光線完全打開,而沒有任何動畫。動畫的持續時間設置爲500毫秒,顯示全景圖像需要大致相同的時間。
我的問題是,有沒有辦法知道,何時呈現紋理?這樣我可以在圖像顯示時觸發動畫?
Three.js版本是r71。
//after light turns dark, the panorama is changed and light goes up again
tweenDarkenLight.onComplete(function() {
roomModule.setRoomVisible(); //sets new room visible
tweenEnhanceLight.start(); //start of animation to enlighten the scene
});
所有房間/全景圖紋理都會在應用程序啓動時加載並附加到球體上。但是,直到用戶選擇其中的一個,它們中的每一個都保持不變。
texture = new THREE.Texture();
loader = new THREE.ImageLoader(manager);
//the url for each panorama is stored in roomAssetArray
loader.load(roomAssetArray.panorama,
function (image) {
texture.image = image;
texture.needsUpdate = true;
});
你可以提供一個jsfiddle,或者至少分享你加載這個紋理的代碼部分。提及您正在使用的three.js版本也很有幫助。 – Leeft