Я импортирую 3D-модель в ScenekKit, затем изменяю угол Эйлера конечности и позволяю конечностям выполнять действие. Однако в это время проникнет одежда и конечности. Как я могу справиться с этой ситуацией?
SceneKit — проникновение в геометрию
Ответы (1)
Я думаю, вам нужно использовать свойство экземпляра continuousCollisionDetectionThreshold
. Это значение дает вам минимальное расстояние, которое тело должно пройти, чтобы SceneKit применил более точный (но более затратный по процессору/графическому процессору) алгоритм для обнаружения контактов с другими телами.
var continuousCollisionDetectionThreshold: CGFloat { get set }
Физический движок SceneKit может использовать два типа обнаружения столкновений:
При обнаружении
discrete collision
, когда SceneKit имитирует физику перед рендерингом каждого кадра (см. timeStep и SCNSceneRendererDelegate), он обновляет положение каждого физического тела на основе скорости тела в течение этого интервала времени, а затем проверяет, пересекается ли тело в его новом положении с другими телами.При обнаружении
continuous collision
SceneKit вычисляет объем, который будет пересекаться телом в каждом кадре, а затем проверяет, пересекает ли этот объем другие тела. Значение этого свойстваdefaults to 0.0
, что приводит к дискретному обнаружению столкновений в любое время. Если это значение не равно нулю, SceneKit применяет непрерывное столкновение всякий раз, когда тело проходит расстояние, превышающее указанное в пределах одного timeStep.
Дискретное обнаружение столкновений обеспечивает высокую производительность, но может привести к неточным результатам для небольших быстро движущихся тел. Непрерывное обнаружение столкновений снижает производительность и работает только для сферических физических форм, но обеспечивает более точные результаты.