2015-11-03 3 views
2

Как получить доступ к элементу по элементам, экспортированным из файла полной сцены .blend!Three.js: Как подсчитать объекты, добавленные в сцену

В этом тесте я экспортировал сцену Blender с четырьмя кубами. Теперь, с тэгом .js, я хочу сохранить эти кубы (объекты) в массиве javascript. Я пробовал это:

<html lang="pt-BR"> 
<head> 
    <meta charset="UTF-8" /> 
</head> 
<script src="./js/three.min.js"></script> 
<script src="./js/OrbitControls.js"></script> 
<script type="text/javascript" src="./js/dat.gui.min.js"></script> 
<script src="./js/OBJLoader.js"></script> 

<div id="render"> 
</div> 

<script> 
// VARIÁVEIS 

var qtd = 0; 
var tam = 0; 
var Modelo; 
var Elementos = []; 

// OBJETOS 
var Render = new THREE.WebGLRenderer(); 
var Cenario = new THREE.Scene(); 
var Cam = new THREE.PerspectiveCamera(); 
var LuzDir; 
var controles; 

// modelo 3d com .ObjectLoader() 
var Modelo3d_Object = new THREE.ObjectLoader(); 
Modelo3d_Object.load('modelo3d_teste.json', funcaoCarregaJSON); 

// INI FUNCOES 
inicio(); 
animacao(); 
console.log(Cenario); 
console.log(Cenario.__webglObjects); 
Elementos = Cenario.__webglObjects; 
console.log(Elementos.length); 

// FUNÇÕES 
function inicio(){ 
    Render.setSize(600,600); 
    document.getElementById('render').appendChild(Render.domElement); 
    Cam.position.z = 100; 
    Cenario.add(Cam); 
    Cenario.add(new THREE.GridHelper(100,10)); 
    LuzDir = new THREE.DirectionalLight(0xffffff, 1); 
    LuzDir.position.set(100, 100, 50); 
    Cenario.add(LuzDir); 
    controles = new THREE.OrbitControls(Cam, Render.domElement);  
} 

// Carrega arquivo JSON 
function funcaoCarregaJSON(geometry){ 
    geometry.position.x = 0; 
    geometry.position.y = 0; 
    geometry.position.z = 0; 
    Cenario.add(geometry); 
} 

function animacao() { 
    requestAnimationFrame(animacao); 
    render_modelo(); 
} 

function render_modelo(){ 
    // Renderizar 
    Render.render(Cenario, Cam); 
}  
</script> 
<html> 

Но в этом случае я вижу только один элемент.

1 or 4 elements in ".__webglObjects"?

Где я пошло не так ??

Download: .JSON File

ответ

0

В вашем funcaoCarregaJSON() только перед возвращением я хотел бы сделать:

var numOfMeshes = 0; 
geometry.traverse(function(child) { 
    if(child instanceof THREE.Mesh) 
     numOfMeshes++; 
}); 
+0

Спасибо Gaitat, я попытался это, но это не сработало. «numOfMeshes» как глобальная переменная не обновляется в функции _callback. Я пытаюсь выяснить, как получить доступ к моим четырем кубикам через _cenário. Может ли кто-нибудь помочь мне в этом отношении. – user4659257

Смежные вопросы