创建THREE.js OBJ MTL Loader返回的Object实例

时间:2013-12-30 17:24:03

标签: three.js

我很遗憾在这里再次提出这个问题。我知道成员os Stack Overflow不适合我的专属 使用,但真的需要找到解决这个问题的方法。

让我解释得更好,因为上次我不清楚我想要什么。

我使用THREE.JS来开发类似RPG的游戏。我想到的是一款像IronBane MMO一样的游戏,但没有 现在的Web服务器功能(仅用于单人游戏)。

我是THREE.js的新手,在某些时候,我开始在一个库中工作来处理对象加载我 我的水平。因为我使用3DStudio Max来制作模型,所以我决定使用提供的OBJMTLLoader库。

我已经确定了加载de静态对象的函数及其类似的东西。

function loadObject(obj,mtl,pos){   // Adiciona objeto sem vinculá-lo a uma variável
    var loader = new THREE.OBJMTLLoader();
        loader.load( obj, mtl, function ( object ) {
            object.position.set(pos[0],pos[1],pos[2]);
            scene.add( object );
    });
}

当我需要对此对象进行初始化时,问题就出现了。我试过很多例子:

function addObject(obj,mtl){    // Declara e adiciona um objeto no mapa

var conteudo;

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

setTimeout(function(){
    scene.add( conteudo );
},1000);

当然,conteudo变量未定义。我明白我需要先等待对象加载。它 需要大约2个渲染cicles。为此,我使用setTimeout函数。用scene.add(conteudo)对象 被充分地添加到现场。我尝试使用

return conteudo;

,当我打电话时......

var objeto = new addObject('object path','material path') 

我得到了addObject的实例而不是我期望的Object3D。我也尝试在de函数和声明之外声明一个数组 从addObject内部推送它,如下所示:

function addObject(obj,mtl,objectArray)

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

setTimeout(function(){
    scene.add( conteudo );
    objectArray.push( conteudo );
},1000);

在第二个当我在console.log中获取数组时:

Array[1]
    0 : THREE.Object3D
    length : 1

但是当我尝试使用Array [0]或console.log(Array.length)时,我得到了undefined和0。

如果有人可以帮我解决这个问题,我真的很感激。那将是真棒。谢谢你!

1 个答案:

答案 0 :(得分:0)

考虑等待添加对象。

function init(next){

    var loader = new THREE.OBJMTLLoader();
        loader.load( obj, mtl, function ( object ) {
            object.position.set(pos[0],pos[1],pos[2]);
            conteudo = object;
            next();
    });

}

function next(){
    scene.add( conteudo );
    objectArray.push( conteudo );
    console.log(objectArray)

    ... work from here, here you are sure that the model is loaded ... 

}

init(next);

等待对象加载,然后它将在下一步执行。