ARKit - SCNNode连续运动

6

我正在尝试创建一个应用程序,让用户堆叠不同的几何形状。在加载到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。这可能会对你想要的力产生太大的影响,但值得一试。 - theMikeSwan
这些块的尺寸非常小。如果将块稍微放大一点,比如说:1.0,会发生什么? - JaredH
2个回答

1
这个问题很可能与一个名为“Dynamic”的因素有关,它将允许它不断移动,或者可能与物体互相碰撞有关。要解决这个问题,您只需要将碰撞掩码更改为两个不同的数字即可。

1

我看到您模拟中可能存在两个缺陷:

  • 您的物体被堆叠在一起。当两个物体碰撞时,会添加一小部分误差以保持物理系统处于稳定状态并防止出现奇怪的行为。因此,当您将物体堆叠在一起时,会添加误差量,从而使模拟变得不准确。我建议随着时间的推移或根据位置使物体静态化,或者稍微减少重力。
  • 大多数物理引擎使用单位大小(大多数情况下为1,例如Box2D或PhysX)更好地工作。非常小或非常大的物体倾向于表现得不太自然。0.075听起来对于模拟来说有点小。我没有明显的解决方案,也许可以寻找改变参考尺寸的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接