2016-02-07 99 views
1

我使用OBJLoader导入obj文件。之后我想从导入的模型中改变孩子的位置。 我试图让孩子的位置用下面的代码:设置儿童的世界位置

var vector = new THREE.Vector3(); 
vector.setFromMatrixPosition(child.matrixWorld); 
console.log('vector', vector); 

但它总是返回

THREE.Vector3 {x: 0, y: 0, z: 0} 

我怎样才能获得孩子的当前世界的位置,然后改变它呢?

+1

在调用'setFromMatrixPosition()'之前,尝试为父模型调用'model.updateMatrixWorld(true)'。 – WestLangley

+0

我还有 THREE.Vector3 {x:0,y:0,z:0} – MMaker

+1

也许孩子在0,0,0 – Neil

回答

1

在获得位置之前,您可以渲染场景一次。

你得到这个职位之前,使用该行代码:

renderer.render(scene,camera); 

(在这里我假设你的场景和摄像机的名称是场景和摄像机)

下面是加载对象的示例并获得位置:

var objLoader = new THREE.OBJLoader(); 
objLoader.setMaterials(materials); 
objLoader.setPath('models/'); 
objLoader.load(objFile, function (child) { 
    child.position.z = 20; 
    scene.add(child); 
    renderer.render(scene,camera); 
    var vector = new THREE.Vector3(); 
    vector.setFromMatrixPosition(child.matrixWorld); 
    console.log('vector', vector); 
}, onProgress, onError); 

这里,如果你对此有何评论 “renderer.render(场景,相机);”,您将获得:

的Vector3 {X:0,Y:0,Z:0}

,如果你取消注释它,你将得到:

的Vector3 {X:0,Y:0,Z:20}