2015-04-03 70 views
1

我不得不加載很少的模型,並希望能夠從加載器外部到達它們。當我嘗試遵循DRY規則時,我想創建一個用於加載和返回對象的函數。使用相同的功能加載多個對象

function loadObject(obj, mtl) { 
      var loader = new THREE.OBJMTLLoader(); 
      return loader.load(obj, mtl, function (object) { 
       return object; 
      }); 
} 

,但使用的主要功能

var box = loadObject('box.obj', 'box.mtl'); 
    scene.add(box); 

後,我得到:

THREE.Object3D.add:對象不THREE.Object3D的實例。 undefined

+0

只是在這裏猜測,但我認爲'loadObject'的第一個參數不期待一個字符串'box.obj',而是某種對象。 – 2015-04-03 17:17:57

+0

沒有。它應該將字符串名稱傳遞給內部的加載器加載函數來獲取合適的模型 – mjanisz1 2015-04-03 17:19:57

回答

0

你不是return ing你認爲你來自loadObjectloader.load的第三個參數是回調;它可能是異步調用的。 load本身不返回任何內容,這就是爲什麼box最終爲undefined。或許你也應該通過當負載完成到loadObject會發生什麼:

function loadObject(obj, mtl, onSuccess) { 
    var loader = new THREE.OBJMTLLoader(); 
    loader.load(obj, mtl, onSuccess); 
} 

var box = loadObject('box.obj', 'box.mtl', function(box) { 
    // 1 
    scene.add(box); 
}); 

// 2 
more code 

請記住,與回調異步方法,下面的「2」的代碼可以之前的「1」下執行代碼。

+0

@ mjanisz1:我希望我知道更多關於threejs的信息,但是可惜我沒有。儘管你可以將它作爲一個單獨的問題來提問! – 2015-04-03 17:46:50