usar tutorial three texture particulas libreria how ejemplos con como javascript three.js centroid

javascript - tutorial - Three.js r68-No se pueden obtener los centroides de las geometrías con OBJMTLLoader



three js texture (1)

Si desea calcular el centroide de toda la geometría, este es el código que necesita:

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

He estado usando una revisión antigua de Three.js durante bastante tiempo, así que decidí actualizar a la última versión (r68). Sabía que me encontraría con algunos problemas, pero no esperaba la eliminación de las propiedades geometry.computeCentroids () y .centroid.

Estoy cargando modelos usando la biblioteca OBJMTLLoader. El problema con esto es que, dado que ya no tiene el método .computeCentroids (), no tengo forma de obtenerlos. Intenté calcularlos usando otros métodos, pero fue en vano:

También intenté usar los métodos .localToWorld (punto), pero tampoco funcionan. Siempre regresa (0,0,0).

Por ahora, cuando hago clic en una malla, estoy calculando (o tratando de calcular) su centroide con:

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

También estoy usando esto cada vez que agrego un nuevo objeto a la escena (que tiene mallas secundarias):

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

Lo que es aún más extraño es que los centroides que intento calcular no son consistentes. Siempre muestra los mismos vectores en console.log (), sin importar en qué orden haga clic en las mallas.

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…}

Me preguntaba si alguien tuvo un problema similar con esto. No he probado las revisiones anteriores de three.js, ya que realmente quiero actualizar a la última versión y mantenerla constante desde allí.

Gracias de antemano.

EDITAR: Olvidé mencionar un detalle importante. Quiero el centroide en coordenadas WORLD.

Después de usar el método de mrdoob, pude obtener un centroide. Siempre obtengo el mismo valor para cada malla porque, aunque estoy usando .calculateBoundingBoxes () en cada malla, estos límites se refieren al objeto principal principal. Cada geometría tiene asignados todos los vértices del objeto, y asumo que los cuadros delimitadores se calculan según estos vértices, y es por eso que obtengo los mismos valores para cada geometría.