2016-06-11 60 views
3

我無法從場景中獲取Object3D。儘管網格物體顯示在場景中。 scene.children數組不顯示。 請看看截圖(鏈接)。在場景中無法獲取object3D

Screenshot

代碼:

function init(){ 
loadJSON(function(response) { 
    // Parse JSON string into object 
    var jsonData = JSON.parse(response); 
    materialType = ['MeshBasicMaterial','MesLambertMaterial','MeshPhongMaterial', 'MeshStandardMaterial']; 

    for (var i =0; i< jsonData.materials.length; i++){ 
     var matName = jsonData.materials[i].name; 
     materialArray[matName] = new THREE.MeshLambertMaterial(); 
     materialArray[matName].name = matName; 
    } 
    var loader = new THREE.OBJLoader(); 

    for(var i = 0; i < jsonData.models.length;i++){ 
     parentGroup = new THREE.Object3D(); 
     parentGroup.name = jsonData.models[i].name; 
     for(var j = 0; j < jsonData.models[i].children.length;j++){ 
      childName = jsonData.models[i].children[j].name; 
      matType = jsonData.models[i].children[j].material; 

      loader.load("models/" + childName, makeHandler(childName , materialArray[matType],parentGroup), false); 

     } 
     scene.add(parentGroup); 
    } 
    });//loadJSON 
    console.log(scene.children); //-- SCREENSHOT OUTPUT -- 

}//init function 

// HANDLER FUNCTION 
function makeHandler(meshName, material,parentObj) { 
    return function(geometry) { 
    object3d = new THREE.Mesh(geometry, material); 
    object3d.name = meshName; 
    parentObj.add(object3d); 
    }; 
} 

感謝。

+0

您可以粘貼試圖獲取這些項目的代碼部分嗎? – kkawabat

+0

只需添加代碼..謝謝。 – Deb

+0

如果您向我們提供錯誤代碼(如果有)並突出顯示代碼中的相關行,它可能也會有所幫助。 – kkawabat

回答

3

loader.load()是一個異步函數調用。這就是您指定回調函數的原因。

對於您的情況,您在模型加載之前以及將模型添加到場景之前調用console.log(scene.children)

three.js r.77

+0

所以任何建議至於怎樣去當。謝謝。此外,現在相同的代碼似乎正在工作。但在刷新頁面時,它不會顯示數組中的子項。 – Deb

+0

我建議你繼續熟悉Javascript。 – WestLangley

+0

是的,謝謝 – Deb