노란 점 이외도 낼 수 있다! ? ARPointCloud를 사용자 정의하여 색상과 모양을 변경해 봅시다.

8517 단어 iOSSwiftARKit
sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]

쓰면 노란 꽃가루와 같은 featurePoints를 쉽게 볼 수 있습니다.



이 기사에서는 이 점 구름의 모양을 사용자 정의해 봅시다.

맞춤 완성 이미지




빨간 점
빨간 콘






빨간 점의 ARPointCloud 만드는 법



Node 만들기



빨간 점이라면


let node = SCNNode()
let geometry = SCNSphere(radius: 0.001)
geometry.firstMaterial?.diffuse.contents = UIColor.red
node.geometry = geometry
return node

빨간 콘이라면


let node = SCNNode()
let geometry = SCNCone(topRadius: 0.001, bottomRadius: 0.01, height: 0.03)
geometry.firstMaterial?.diffuse.contents = UIColor.red
node.geometry = geometry
return node

점 구름 표시



우선 sceneView.sesion을 ARSessionDelegate에 준거시킨다.

featurePoints를 저장하기 위해 변수를 만들 때.
private var featurePoints: [SCNNode] = []

override func viewDidLoad() {
    super.viewDidLoad()

    sceneView.session.delegate = self
}

ARSessionDelegate의 session(didUpdate frame 메서드에서 ARFrame을 매번 가져올 수 있으므로 rawFeaturePoints( ARPointCloud )를 가져오고 해당 포인트에서 각 점의 xyz 좌표를 가져올 수 있습니다.
extension ARPointCloudViewController: ARSessionDelegate {
    func session(_ session: ARSession, didUpdate frame: ARFrame) {
        / ARFrameのrawFeaturePointsのpointsで座標を取得
        guard let pointPositions = frame.rawFeaturePoints?.points else {
            return
        }
        // 前の点群Nodesを取り除く
        self.featurePoints.forEach { $0.removeFromParentNode() }

        // 新しい点群Nodes作成
        let featurePointNodes: [SCNNode] = pointPositions.map { position in
            let node = sphereNode.clone()
            node.position = SCNVector3(position.x, position.y, position.z)
            return node
        }

        // 新しい点群Nodesを貼り付け
        featurePointNodes.forEach { sceneView.scene.rootNode.addChildNode($0) }

        // 一旦保存
        self.featurePoints = featurePointNodes
    }
}

완성



Node를 커스터마이즈하여 다양한 포인트를 만들어 봅시다.


빨간 점
빨간 콘






샘플 코드



htps : // 기주 b. 코 m / k 보 y-시 lゔぇrgym / 아 의 ARPointCloud에 있습니다!

참고문헌

좋은 웹페이지 즐겨찾기