SceneKit - Геометрия проникновения - PullRequest
1 голос
/ 19 апреля 2019

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

enter image description here

1 Ответ

0 голосов
/ 27 апреля 2019

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

var continuousCollisionDetectionThreshold: CGFloat { get set }

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

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

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

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

...