2016-02-07 142 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}