Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js r68-Can';t使用OBJMTLLoader获取几何体的质心_Javascript_Three.js_Centroid - Fatal编程技术网

Javascript Three.js r68-Can';t使用OBJMTLLoader获取几何体的质心

Javascript Three.js r68-Can';t使用OBJMTLLoader获取几何体的质心,javascript,three.js,centroid,Javascript,Three.js,Centroid,我使用旧版本的Three.js已经有一段时间了,所以我决定升级到最新版本(r68)。我知道我会遇到一些问题,但我不希望删除geometry.computeCentroids()和.centroid属性 我正在使用OBJMTLLoader库加载模型。问题是,由于它不再具有.computeCentroids()方法,我无法获得它们。我试着用其他方法计算它们,但没有用: 我也尝试过使用.localToWorld(point)方法,但它们也不起作用。它总是返回(0,0,0) 现在,当我单击网格

我使用旧版本的Three.js已经有一段时间了,所以我决定升级到最新版本(r68)。我知道我会遇到一些问题,但我不希望删除geometry.computeCentroids()和.centroid属性

我正在使用OBJMTLLoader库加载模型。问题是,由于它不再具有.computeCentroids()方法,我无法获得它们。我试着用其他方法计算它们,但没有用:

我也尝试过使用.localToWorld(point)方法,但它们也不起作用。它总是返回(0,0,0)

现在,当我单击网格时,我正在计算(或尝试计算)其质心:

 if (mesh.centroid === undefined) {
    mesh.centroid = new THREE.Vector3();
    mesh.centroid = mesh.geometry.center();
    console.log(mesh.centroid); }
每当我向场景(具有子网格)添加新对象时,我也会使用此选项:

更奇怪的是,我试图计算的质心并不一致。 无论单击网格的顺序如何,它在console.log()中始终显示相同的向量

THREE.Vector3 {x: 158.89799999999997, y: -4.115949999999998, z: 67.75310000000002, constructor: function, set: function…}
THREE.Vector3 {x: 0.000005004882780212938, y: 0.16375010757446518, z: 0.0000024658203301441972, constructor: function, set: function…}
THREE.Vector3 {x: -1.7053025658242404e-13, y: -0.0818749484539012, z: 1.1368683772161603e-13, constructor: function, set: function…}
我想知道是否有人也有类似的问题。我还没有尝试过three.js以前的版本,因为我真的想升级到最新版本并保持一致

先谢谢你

编辑:忘记提到一个重要的细节。我想要世界坐标系中的质心

在使用mrdoob的方法后,我得到了一个质心。我总是为每个网格获得相同的值,因为即使我在每个网格上使用.CalculateBoundingBox(),这些边界也会引用主父对象。
每个几何体都指定了对象的所有顶点,我假设边界框是根据这些顶点计算的,这就是为什么我为每个几何体获得相同的值。

如果要计算整个几何体的质心,这是您需要的代码:

geometry.computeBoundingBox();

var centroid = new THREE.Vector3();
centroid.addVectors( geometry.boundingBox.min, geometry.boundingBox.max );
centroid.multiplyScalar( - 0.5 );

centroid.applyMatrix4( mesh.matrixWorld );

我尝试使用上述方法,但每个对象的质心都相同:
THREE.Vector3{x:158.897999999997,y:-3.9521999999977,z:67.75310000000002,构造函数:函数,集合:函数…}
我刚刚编辑了我的问题,因为我忘记了一个重要的细节:我想使用计算出的质心的世界坐标。使用世界空间位更新了答案。感谢您的帮助!我发现拥有相同值的问题可能与加载器本身有关,但我现在有了完整对象的世界坐标
质心。多重标度(0.5)。OBJLoader R73可能与此相关,我刚刚创建了一个computeCentroids()函数来计算面质心,以替换在较新的三个版本中删除的功能
geometry.computeBoundingBox();

var centroid = new THREE.Vector3();
centroid.addVectors( geometry.boundingBox.min, geometry.boundingBox.max );
centroid.multiplyScalar( - 0.5 );

centroid.applyMatrix4( mesh.matrixWorld );