визуализировать обнаруженную проблему плоскости в RealityKit - PullRequest
0 голосов
/ 01 марта 2020

Ребята, я хочу визуализировать обнаруженную плоскость в RealityKit, используя приведенный ниже код, но в результате получается, что обнаруженная плоскость плавает при движении камеры (не полностью, немного, но очевидно), поэтому мой вопрос заключается в том, как решить эту проблему ?

Может ли тело помочь?

struct ARViewContainer: UIViewRepresentable {

    func makeUIView(context: Context) -> ARView {

        let arView = ARView(frame: .zero)

        let config = ARWorldTrackingConfiguration()
        config.planeDetection = .horizontal
        arView.debugOptions = [.showFeaturePoints, .showWorldOrigin]
        arView.session.run(config, options:[ ])
        arView.session.delegate = arView
        arView.CreatePlane()
        return arView

    }

    func updateUIView(_ uiView: ARView, context: Context) {
    }
}
var planeMesh = MeshResource.generatePlane(width: 0, depth: 0)
var planeEntity = ModelEntity(mesh:planeMesh)

extension ARView : ARSessionDelegate{

    func CreatePlane(){
        let planeAnchor = AnchorEntity(plane:.horizontal)
        //planeEntity.transform.translation = SIMD3(0,0,0)
        planeAnchor.addChild(planeEntity)
        self.scene.addAnchor(planeAnchor)
    }

public func session(_ session: ARSession, didUpdate anchors: [ARAnchor]){
        guard let planeAnchor = anchors[0] as? ARPlaneAnchor else {
          return
        }
        DispatchQueue.main.async {
        let position = planeAnchor.transform.toTranslation()
        let orientation = planeAnchor.transform.toQuaternion()
        let rotatedCenter = orientation.act(planeAnchor.center)
        planeEntity.model?.mesh = MeshResource.generatePlane(
          width: planeAnchor.extent.x,
          depth: planeAnchor.extent.z
        )
        planeEntity.transform.translation = position  + rotatedCenter
        planeEntity.transform.rotation = orientation
        planeEntity.model?.materials = [SimpleMaterial(color:UIColor.white.withAlphaComponent(0.5),isMetallic: false)]
        }

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Вы можете попробовать отключить planeDetection , когда ваш ARPlane уже имеет Якорь и находится в положении, которое вас устраивает. ARKit прекратит обновление якорей, поэтому якорь самолета больше не будет регулироваться, и он должен лучше фиксироваться на поверхности.

Вы можете сделать это, добавив кнопку, чтобы остановить обновления или проверить, ваш самолет уже имеет привязку:

planeAnchor.anchor!.isAnchored == true

В любом случае просто измените конфигурацию для ARWorldTrackingConfiguration без planeDetection

let config = ARWorldTrackingConfiguration()
config.planeDetection = []
arView.session.run(config, options:[ ])
0 голосов
/ 01 марта 2020

может быть, я не прояснил себя, я использовал приведенный выше код для визуализации обнаруженной плоскости в RealityKit. Да, она работает, я могу видеть плоскость и обновлять плоскость при обновлении ARAnchor, то есть положение самолета, ориентация, размер обновляются, когда исследователь продолжает. но есть проблема: визуализированная плоскость не фиксируется в пространстве, то есть после сканирования таблицы визуализированная плоскость не всегда фиксируется на столе, она может перемещаться влево, вправо, ниже таблицы, когда я перемещаю Камера слева 、 справа 、 под таблицей, особенно по оси Y。 Итак, мой вопрос, как это происходит? и как это решить?

...