Cannon. js создать Box из рассчитанных размеров ограничивающего прямоугольника в Three. js - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь добавить физику и столкновения в свое приложение Three. js, которое импортирует модель Blender .glb для объектов сцены.

Для каждого объекта в сцене я использую computeBoundingBox, чтобы получить bbox, и я хочу создать из него объект Cannon.Box.

Это в основном то, что я делаю:

scene.traverse((node) => {
  node.geometry.computeBoundingBox();

  const { position, geometry } = node;
  const { min, max } = geometry.boundingBox;
  const halfExtents = new Vec3((max.x - min.x) / 2, (max.y - min.y) / 2, (max.z - min.z) / 2);

  const boxShape = new Cannon.Box(halfExtents);
  const body = new Cannon.Body({ mass: 0, shape: boxShape });
  body.position = position;

  world.add(body);
  const boxHelper = new THREE.BoxHelper(node);
  scene.add(boxHelper);

}

Я просто хотел проверить, это был правильный способ создания ящика в мире пушек. В мире Three. js объект BoxHelper выглядит идеально.

Я заметил, что с Cannon. js API, Box принимает параметр halfExtents, который, насколько я понимаю, является просто размер уменьшился вдвое. Итак, я вычисляю это из bbox, но сейчас меня смущает следующее:

  1. Следует ли мне применять матрицу преобразования для ограничивающего прямоугольника? Это всего лишь ограничивающая рамка из геометрии узла, так что нужно ли мне дальше преобразовывать ее, чтобы она соответствовала объекту в мировых координатах? И как мне go это сделать?

  2. Что еще я пропустил / есть ли более стандартный способ выполнения этого рабочего процесса (импортированная 3D-сцена с помощью Cannon. js столкновения)? Я впервые использую Cannon, и мне довольно сложно отлаживать то, что происходит в мире физики.

...