Я довольно давно использую старую версию Three.js, поэтому решил обновить ее до последней (r68). Я знал, что столкнусь с некоторыми проблемами, но не ожидал удаления свойств geometry.computeCentroids () и .centroid.
Я загружаю модели с помощью библиотеки OBJMTLLoader. Проблема в том, что, поскольку у него больше нет метода .computeCentroids (), у меня нет возможности их получить. Я пытался вычислить их другими методами, но безуспешно:
- Three.js Как получить положение меша?
- Three.js перемещает и вращает центр геометрии
- Положение дочерней сетки Three.js всегда возвращается (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, так как очень хочу перейти на последнюю версию и сохранить ее согласованность.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Забыл упомянуть важную деталь. Я хочу, чтобы центроид был в МИРОВЫХ координатах.
После использования метода mrdoob я смог получить центроид. Я всегда получаю одно и то же значение для каждой сетки, потому что, хотя я использую .calculateBoundingBoxes () для каждой сетки, эти границы относятся к основному родительскому объекту. Каждой геометрии назначены все вершины объекта, и я предполагаю, что ограничивающие прямоугольники рассчитываются в соответствии с этими вершинами, и поэтому я получаю одинаковые значения для каждой геометрии.