使用 ARSCNPlaneGeometry 获得 SCNPhysicsShape 产生球体形状而不是平面
Using an ARSCNPlaneGeometry to obtain a SCNPhysicsShape produces a sphere shape and not a plane
在使用 ARKit
的应用程序中,我使用 ARSCNPlaneGeometry
class update
方法从 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
.
我也在使用 ARSCNViewDelegate
的 renderer(_:didUpdate:for:)
方法不断更新几何和物理形状,形状保持不变。
其他人运行以前遇到过这个问题吗?
好吧,似乎 SCNPhysicsShape class 从 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]))
"approximate",虽然不是很准确,但得到了形状。
在使用 ARKit
的应用程序中,我使用 ARSCNPlaneGeometry
class update
方法从 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
.
我也在使用 ARSCNViewDelegate
的 renderer(_:didUpdate:for:)
方法不断更新几何和物理形状,形状保持不变。
其他人运行以前遇到过这个问题吗?
好吧,似乎 SCNPhysicsShape class 从 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]))
"approximate",虽然不是很准确,但得到了形状。