Главная » Frontend » Как получить размеры 3d-объекта с произвольным набором mesh-ей в Three.js?
2016/03/31Метки: ,

Как получить размеры 3d-объекта с произвольным набором mesh-ей в Three.js?

При разработке приложений на Three.js зачастую возникает ситуация, когда на сцену помещается 3d object с набором потомков. Особенностью 3d-объекта является то, что у него отсутствует свойство геометрии с методом computeBoundingBox(), который позволяет получить границы параллелепипеда (координаты max и min), в которые заключен объект. Тех, кто только начинает работать с Three.js, может заинтересовать вопрос, каким образом вычислить размеры такого объекта?

Есть простой способ. Для этого следует всего лишь создать объект с помощью конструктора THREE.Box3() и воспользоваться методом setFromObject(), в который передать наш 3d-объект, напичканный разнообразными мешами. Теперь у нас есть граничные координаты max и min, соответственно вычисление размеров уже дело арифметики.

var getBoundaryGeometry = function(obj) {
    var modelBoundingBox;

    modelBoundingBox = new THREE.Box3().setFromObject(obj);
    modelBoundingBox.size = {};
    modelBoundingBox.size.x = modelBoundingBox.max.x - modelBoundingBox.min.x;
    modelBoundingBox.size.y = modelBoundingBox.max.y - modelBoundingBox.min.y;
    modelBoundingBox.size.z = modelBoundingBox.max.z - modelBoundingBox.min.z;

    return modelBoundingBox;
};

Как видите данный способ занимает всего пару строк. Хотя справедливости ради следует заметить, что можно и вручную сделать все те же самые действия, перебрав в цикле всех потомков 3d-объекта. При этом необходимо последовательно вызывать метод computeBoundingBox() свойства geometry каждого потомка и сравнением вычислять наиболее отдаленные вершины max и min.

В приведенном ниже примере на сцену добавлен 3d-объект с 10 рандомно спозиционированными кубами. При инициализации вычисляются размеры объекта, которые пишутся в блок в правом верхнем углу. При этом также происходит вращение вокруг оси y, поэтому размеры параллелепипеда, расположенного вдоль координатных осей и включающего в себя все кубы, изменяются. С помощью кнопки «Обновить» можно обновить размеры.

Метки: Метки: ,
Понравилась статья? — Ставь лайк!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

×
Новости и обзор новинок рынка строительной техники.
Подпишитесь на обновления нашей группы!