首页 > 解决方案 > SceneKit - 几何穿透

问题描述

我将一个3D模型导入ScenekKit,然后改变肢体的欧拉角,让肢体做动作。但是,此时,衣服和四肢会穿透。我该如何处理这种情况?

在此处输入图像描述

标签: iosunity3dscenekitscene3d-model

解决方案


我认为你必须使用continuousCollisionDetectionThreshold实例属性。此值为您提供身体必须经过的最小距离,以便 SceneKit 应用更精确(但 CPU/GPU 成本更高)的算法来检测与其他身体的接触。

var continuousCollisionDetectionThreshold: CGFloat { get set }

SceneKit 的物理引擎可以使用两种碰撞检测

  • 通过discrete collision检测,当 SceneKit 在渲染每一帧之前模拟物理时(参见timeStepSCNSceneRendererDelegate),它会根据身体在该时间间隔内的速度更新每个物理体的位置,然后检查其新位置的身体是否与其他身体相交.

  • 通过continuous collision检测,SceneKit 会计算一个物体在每一帧中将穿过的体积,然后检查该体积是否与其他物体相交。此属性的值defaults to 0.0,始终导致离散碰撞检测。当此值非零时,只要身体在一个timeStep内移动超过指定距离,SceneKit 就会应用连续碰撞。

离散碰撞检测提供高性能,但可能导致小型快速移动物体的结果不准确。连续碰撞检测具有性能成本并且仅适用于球形物理形状,但提供更准确的结果。


推荐阅读