three.js box3 импортируемой сферы - PullRequest
1 голос
/ 29 октября 2019

У меня короткий вопрос: я знаю, как рассчитать коробки моих (импортированных) 3dобъектов, например:

var box = new THREE.Box3 (). SetFromObject (obj);

Благодаря этому я могу вычислять блоки для своих объектов и объединять их вместе, если хочу.

Проблема в том, что теперь у меня есть эти 2 объекта https://imgur.com/gallery/NbPwcmB

Решение кажется довольно простым:мне нужно вычислить левую и правую сферу и сложить их вместе, но оба эти 2 объекта импортируются с помощью stlloader. Я не уверен, как именно работает stlloader (мне кажется, что это всего одна огромная сетка), поэтому я даже не уверен, возможно ли это.

, поэтому мои вопросы: 1. Как я могу вычислитькоробка с формой сферы моего объекта сферы. 2. Возможно ли это даже для моего объекта stl? (Я попробую, когда получу ответ на вопрос 1)

Редактировать: Вопрос 1 должен каким-то образом работать с .computeBoundingSphere .. Есть ли способ сделать это видимым?

1 Ответ

1 голос
/ 29 октября 2019
  1. как я могу вычислить прямоугольник с формой сферы моего объекта сферы.

Ну, в three.js у вас есть выбор между двумя ограничивающими томами. THREE.Box3 представляет ограничивающую рамку с выравниванием по оси (AABB), тогда как THREE.Sphere представляет ограничивающую сферу. Если вам нужна коробка в форме сферы , используйте THREE.Sphere.

Возможно ли это даже для моего объекта stl?

Метод setFromObject() существует только для THREE.Box3. Однако вы можете вычислить ограничивающую сферу с помощью THREE.BufferGeometry.computeBoundingSphere(). Однако эта сфера определяется в локальном пространстве. Вы можете использовать THREE.Sphere.applyMatrix4(), чтобы преобразовать его в мировое пространство, передав матрицу мира трехмерного объекта.

Есть ли способ сделать это видимым?

Не существует вспомогательного класса для ограничивающих сфер. Но вы можете легко создать вспомогательную сетку на основе THREE.SphereBufferGeometry. Что-то вроде:

const geometry = new THREE.SphereBufferGeometry( boundingSphere.radius );
const material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );

const mesh = new THREE.Mesh( geometry, material );
mesh.position.copy( boundingSphere.center );
scene.add( mesh );

three.js R109

...