Использование ARSCNPlaneGeometry для получения SCNPhysicsShape создает форму сферы, а не плоскость - PullRequest
0 голосов
/ 18 января 2019

В приложении, использующем ARKit, я использую метод ARSCNPlaneGeometry class update для получения SCNGeometry из ARPlaneGeometry. Я получаю 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.

Я также постоянно обновляю форму геометрии и физики, используя renderer(_:didUpdate:for:) метод ARSCNViewDelegate, и форма остается прежней.

Кто-нибудь еще сталкивался с этой проблемой раньше?

1 Ответ

0 голосов
/ 19 января 2019

Что ж, кажется, что абстракция формы, которую класс 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]))

Получена "приблизительная", хотя и не совсем точная форма.

...