我使用OBJLoader导入obj文件。之后我想从导入的模型中更改孩子的位置。 我尝试使用以下代码获取孩子的位置:
var vector = new THREE.Vector3();
vector.setFromMatrixPosition( child.matrixWorld );
console.log('vector', vector);
但它总是返回
THREE.Vector3 {x: 0, y: 0, z: 0}
我怎样才能获得孩子当前的世界位置然后改变它?
答案 0 :(得分: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(scene,camera);”,你会得到:
Vector3 {x:0,y:0,z:0}
如果您取消注释,您将获得:
Vector3 {x:0,y:0,z:20}