【问题标题】:ARKit - SCNNode continuous movementARKit - SCNNode 连续移动
【发布时间】:2018-08-03 10:48:42
【问题描述】:

我正在尝试创建一个应用程序,用户可以在其中堆叠不同的几何形状。在 ARSCNView 中加载的 .scn 文件中,我插入一个静态平面,然后在用户每次点击时,应用程序都会插入一个动态 SCNNode。

第一个节点被插入到平面上方几英寸处,以复制坠落的物体。然后,每个其他节点都被丢弃在另一个节点之上。

这是应用程序的主要思想;添加3或4个节点后出现问题,它们似乎相互滑动,几乎摇晃,整个结构崩溃。

这是我要插入的节点:

let dimension: CGFloat = 0.075
let cube = SCNBox(width: dimension, height: dimension, length: dimension, chamferRadius: 0.0)
let node = SCNNode(geometry: cube)

node.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic, shape: nil)
node.physicsBody?.mass = 2.0

node.physicsBody?.friction = 1.0
node.physicsBody?.restitution = 0.01

node.physicsBody?.damping = 0.0
node.physicsBody?.angularDamping = 0.0

node.physicsBody?.rollingFriction = 1.0

node.physicsBody?.allowsResting = true

let insertionYOffset = 0.3
node.position = SCNVector3(hitResult.worldCoordinates.x, hitResult.worldCoordinates.y + Float(insertionYOffset), hitResult.worldCoordinates.z)

我尝试过使用这些值,这些是最好的,但它们不足以创建稳定的块结构。

作为一项要求,我需要让方块保持动态,它们需要受到重力、风等的影响。

【问题讨论】:

  • 您也可以尝试调整velocityFactor。这是SCNVector3。可能会影响你想要太多的力量,但值得一试。
  • 这些块的尺寸非常小。当你让块更大一点时会发生什么,比如:1.0?

标签: ios swift scenekit arkit


【解决方案1】:

这个问题很可能与一个名为 Dynamic 的因素有关,该因素将允许它连续移动,或者可能与对象相互碰撞以解决该问题有关,您只需将碰撞掩码更改为两个不同的数字。

【讨论】:

    【解决方案2】:

    我看到两点可能是您的模拟的缺陷:

    • 您的对象已堆叠。当两个物体发生碰撞时,会添加少量误差,以使物理保持在稳定阶段并防止出现奇怪的行为。因此,当您堆叠对象时,您会添加错误量并且模拟变得不准确。我建议让物体随着时间的推移或位置保持静止,或者稍微降低重力。
    • 大多数物理引擎更适用于按单位大小调整大小的对象(大多数情况下,它是 1,就像在 Box2D 或 PhysX 中一样)。非常小或非常大的物体往往表现得不那么自然。 0.075 对于模拟来说听起来有点小。我没有看到明显的解决方案,也许可以寻找改变参考大小的方法。

    【讨论】:

      猜你喜欢
      • 2019-01-30
      • 2018-01-12
      • 2018-09-01
      • 2018-01-02
      • 2017-11-27
      • 2018-08-04
      • 1970-01-01
      • 2019-09-22
      • 2017-12-14
      相关资源
      最近更新 更多