使用ARSCNPlaneGeometry获得SCNPhysicsShape将生成球体形状,而不是平面



在使用ARKit的应用程序中,我使用ARSCNPlaneGeometryupdate方法从ARPlaneGeometry获得SCNGeometry。我从该几何体中获得一个SCNPhysicsShape,用作平面节点的SCNPhysicsBody

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
// Plane Geometry
let planeGeometry = ARSCNPlaneGeometry(device: MTLCreateSystemDefaultDevice()!)
planeGeometry?.update(from: planeAnchor.geometry)
let planeNode = SCNNode(geometry: planeGeometry)
// Plane Physics
planeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: planeGeometry!))
// Add Node to Scene
node.addChildNode(planeNode)
}

我遇到的问题是,即使显示的平面节点是一个平面,生成的物理形状也不是平面的形状,而是粗糙球体的形状。我之所以知道这一点,是因为我使用的是场景视图调试选项.showPhysicsShapes

我也在使用ARSCNViewDelegaterenderer(_:didUpdate:for:)方法不断更新几何和物理形状,并且形状保持不变。

以前有人遇到过这个问题吗?

好吧,SCNPhysicsShape类从ARSCNPlaneGeometry计算的形状抽象似乎完全关闭了,除非你用一个选项来帮助它。如果不是:

planeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: planeGeometry!))

您使用的:

planeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: planeGeometry!, options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.boundingBox]))

得到了"近似"的形状,虽然不是很精确。

相关内容

  • 没有找到相关文章

最新更新