Three.js如何获得网格的位置?

Tez*_*can 8 javascript three.js

使用下面的代码,返回网格的位置,(0, 0, 0)但不是.那么渲染过程后计算的positioın向量是什么?

me.scene.add(objMesh); //me is a project class
objMesh.updateMatrixWorld(true);
alert(objMesh.position.x + ',' + objMesh.position.y + ',' + objMesh.position.z);
Run Code Online (Sandbox Code Playgroud)

objMesh是从objfile创建的,它被正确地添加到场景中并且质心是大约(-8,3,0)但是objMesh的位置向量是(0,0,0)我们是否必须先自动计算某些东西或者我应该计算它是从网格的几何顶点手动?

http://81.214.75.32:8181/admin 是网址

该网站是土耳其语所以我将翻译UI项目

在网站上有"Dosya"菜单项选择菜单项并选择"ProjeAç"对话框中出现一个对话框选择MUTFAK_1场景将出现在该场景中,每个网格位置为(0,0,0)即可: )

mrd*_*oob 23

object.position始终是对象的本地.如果你想获得世界空间的位置,你需要得到它object.matrixWorld.

试试这个:

scene.add(objMesh);
scene.updateMatrixWorld(true);
var position = new THREE.Vector3();
position.getPositionFromMatrix( objMesh.matrixWorld );
alert(position.x + ',' + position.y + ',' + position.z);
Run Code Online (Sandbox Code Playgroud)

R58


更新:

该功能getPositionFromMatrix()已重命名为setFromMatrixPosition().

  • mrdoob,那是我之前尝试过的……此代码也返回 (0, 0, 0)。你能从上面的网址检查应用程序吗?在镶木地板上应该有一个用于反射的立方体相机。场景的导入由 FileManager.js 完成。您将在第 290 行看到在 if 块中添加网格的代码。我无法获得任何网格的世界位置。我更新了项目以自动加载场景在右侧窗格(“Nesne Ozellikleri”)中,有“Yansima Merkez”文本框。这些值会改变cubeCamera 的位置 (2认同)

mrd*_*oob 12

要查找世界空间中几何体质心的位置,请尝试以下方法:

objMesh.geometry.computeBoundingBox();

var boundingBox = objMesh.geometry.boundingBox;

var position = new THREE.Vector3();
position.subVectors( boundingBox.max, boundingBox.min );
position.multiplyScalar( 0.5 );
position.add( boundingBox.min );

position.applyMatrix4( objMesh.matrixWorld );

alert(position.x + ',' + position.y + ',' + position.z);
Run Code Online (Sandbox Code Playgroud)

R58


Tez*_*can 5

是的。在与 mrdoob 交谈之后,我意识到对象的位置对于它们自己来说是本地的。我的情况是考虑顶点找到网格的中心点。下面是获取质心的代码,该代码来自答案#447(https://github.com/mrdoob/ Three.js/issues/447 )

geom.centroid = new THREE.Vector3();
for (var i = 0, l = geom.vertices.length; i < l; i++) {
    geom.centroid.add(geom.vertices[i]);
}
geom.centroid.divideScalar(geom.vertices.length);
Run Code Online (Sandbox Code Playgroud)

现在我们有了几何质心......

根据https://github.com/mrdoob/third.js/wiki/Migration更新,.addSelf已重命名为.addr55 之后