【问题标题】:Three.js: How to count the Objects Added in SceneThree.js:如何计算场景中添加的对象
【发布时间】:2016-02-03 22:08:27
【问题描述】:

如何逐个访问从完整场景 .blend 文件导出的元素!

在这个测试中,我导出了一个包含四个立方体的 Blender 场景。现在,使用three.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>

但在这种情况下,我只能看到一个元素。

我哪里出错了??

Download: .JSON File

【问题讨论】:

    标签: three.js blender scene


    【解决方案1】:

    在您返回之前,我会在您的funcaoCarregaJSON() 中这样做:

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

    【讨论】:

    • 感谢 Gaitat,我试过了,但没有用。 “numOfMeshes”作为全局变量不会在 _callback 函数中更新。我试图弄清楚如何通过 _cenário 访问我的四个立方体。任何人都可以在这方面帮助我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2023-03-03
    • 2015-10-12
    相关资源
    最近更新 更多