ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – Three.js r68 – 无法使用OBJMTLLoader获取几何体的质心

2019-08-25 01:35:03  阅读:412  来源: 互联网

标签:javascript three-js centroid


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

我正在使用OBJMTLLoader库加载模型.这个问题是因为它不再有.computeCentroids()方法,所以我无法获取它们.我试图用其他方法计算它们,但无济于事:

> Three.js How to get position of a mesh?
> Three.js move and rotate the center of geometry
> Three.js Child Mesh position always return (0,0,0)

我也试过使用.localToWorld(point)方法,但它们也没有用.它总是返回(0,0,0).

现在,当我点击一个网格时,我正在计算(或试图计算)它的质心:

 if (mesh.centroid === undefined) {
    mesh.centroid = new THREE.Vector3();
    mesh.centroid = mesh.geometry.center();
    console.log(mesh.centroid); }

每当我向场景添加一个新对象(具有子网格物体)时,我也会使用它:

//desperate try to find different values for centroids
object.updateMatrix();
scene.updateMatrix();
object.updateMatrixWorld();
scene.updateMatrixWorld();

更奇怪的是,我试图计算的质心并不一致.
它总是在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版本,因为我真的想升级到最新版本并保持一致.

先感谢您.

编辑:忘了提一个重要的细节.我想要WORLD坐标中的质心.

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

解决方法:

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

geometry.computeBoundingBox();

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

centroid.applyMatrix4( mesh.matrixWorld );

标签:javascript,three-js,centroid
来源: https://codeday.me/bug/20190825/1714142.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有