SceneKit — проникновение в геометрию

Я импортирую 3D-модель в ScenekKit, затем изменяю угол Эйлера конечности и позволяю конечностям выполнять действие. Однако в это время проникнет одежда и конечности. Как я могу справиться с этой ситуацией?

введите здесь описание изображения


person fanjianrong    schedule 19.04.2019    source источник


Ответы (1)


Я думаю, вам нужно использовать свойство экземпляра continuousCollisionDetectionThreshold. Это значение дает вам минимальное расстояние, которое тело должно пройти, чтобы SceneKit применил более точный (но более затратный по процессору/графическому процессору) алгоритм для обнаружения контактов с другими телами.

var continuousCollisionDetectionThreshold: CGFloat { get set }

Физический движок SceneKit может использовать два типа обнаружения столкновений:

  • При обнаружении discrete collision, когда SceneKit имитирует физику перед рендерингом каждого кадра (см. timeStep и SCNSceneRendererDelegate), он обновляет положение каждого физического тела на основе скорости тела в течение этого интервала времени, а затем проверяет, пересекается ли тело в его новом положении с другими телами.

  • При обнаружении continuous collision SceneKit вычисляет объем, который будет пересекаться телом в каждом кадре, а затем проверяет, пересекает ли этот объем другие тела. Значение этого свойства defaults to 0.0, что приводит к дискретному обнаружению столкновений в любое время. Если это значение не равно нулю, SceneKit применяет непрерывное столкновение всякий раз, когда тело проходит расстояние, превышающее указанное в пределах одного timeStep.

Дискретное обнаружение столкновений обеспечивает высокую производительность, но может привести к неточным результатам для небольших быстро движущихся тел. Непрерывное обнаружение столкновений снижает производительность и работает только для сферических физических форм, но обеспечивает более точные результаты.

person Andy Fedoroff    schedule 27.04.2019