Как я могу случайным образом размещать объекты AR в реальном мире?

#swift #xcode #augmented-reality #arkit #realitykit

#swift #дополненная реальность #arkit #realitykit

Вопрос:

Поэтому я хочу, чтобы пользователь мог открывать приложение и осматриваться с помощью камеры телефона и видеть случайные объекты дополненной реальности.

Как я могу случайным образом размещать их?

Извините за вопрос новичка. Я много видел о создании базовой плоскости, но я хочу, чтобы это можно было использовать во многих разных местах без предварительной каталогизации.

Комментарии:

1. Если ваш iPad не является LiDAR, вы хотите сначала обнаружить плоскость. Тогда просто raycastQuery ( hit-test , старый способ, устарел) случайное место для размещения объектов.

Ответ №1:

если вы хотите автоматическое размещение моделей в RealityKit, но без помощи raycasting и ARWorldMap, вам, по крайней мере, нужно активировать обнаружение плоскости. Вставьте этот код в Swift Playgrounds на iPad, чтобы протестировать его.

 import UIKit
import RealityKit
import PlaygroundSupport

class ViewController: UIViewController {        
    let arView = ARView(frame: .zero)
    
    override func viewDidLoad() {
        super.viewDidLoad()            
        self.view = self.arView
        self.arView.cameraMode = .ar          
        self.feed()
    }        
    fileprivate func feed() {            
        let anchorA = AnchorEntity(plane: .horizontal)
        let anchorB = AnchorEntity(plane: .horizontal)
        let anchorC = AnchorEntity(plane: .horizontal)            
        let model = ModelEntity(mesh: .generateSphere(radius: 0.025))
        anchorA.addChild(model)
        arView.scene.anchors.append(anchorA)
        
        DispatchQueue.main.asyncAfter(deadline: .now()   3) {
            anchorB.addChild(model.clone(recursive: false))
            self.arView.scene.anchors.append(anchorB)
        }                
        DispatchQueue.main.asyncAfter(deadline: .now()   4) {
            anchorC.addChild(model.clone(recursive: false))
            self.arView.scene.anchors.append(anchorC)
        }
    }
}  
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = ViewController()