AR项目实践二:ar直尺

1. 搭载初始代码

这一部分比较简单就不再秒速了

xib文件


import UIKit
import ARKit
import SceneKit


class ViewController: UIViewController {

    @IBOutlet weak var scenview: ARSCNView!

    @IBOutlet weak var targetImg: UIImageView!
    @IBOutlet weak var infoLalbel: UILabel!
    @IBOutlet weak var stackView: UIStackView!

    var session = ARSession()//session
    var configuration = ARWorldTrackingConfiguration()//监听



    override func viewDidLoad() {
        super.viewDidLoad()

        self.setup()
        // Do any additional setup after loading the view, typically from a nib.


    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //全局追踪的方法
        session.run(configuration, options: [.resetTracking,.removeExistingAnchors])

    }



    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        session.pause()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    //mark:setup
    func setup()  {
        scenview.delegate = self

        scenview.session = session

        infoLalbel.text = "初始化中..."
    }


}



extension ViewController: ARSCNViewDelegate {
     //改变摄像头的焦点就能调用这个方法
    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {

//        DispatchQueue.main.async {
   
//            self.scanWorld()
//        }

    }

    func session(_ session: ARSession, didFailWithError error: Error) {

        infoLalbel.text = "错误"
    }

    func sessionWasInterrupted(_ session: ARSession) {

        infoLalbel.text = "中断~"
    }

    func sessionInterruptionEnded(_ session: ARSession) {

        infoLalbel.text = "结束"
    }

}

2. 获取三维坐标,获取相机的实时位置

编写两个扩展ARSCNView+Extension 和 SCNVector3 + Extension

ARSCNView+Extension

extension ARSCNView{
    //    拿到三维坐标
    func worldVector(for position: CGPoint) -> SCNVector3?{

        let results = self.hitTest(position, types: [.featurePoint])


        guard let result = results.first else {
            return nil
        }


        //将拿到的点转化为三维坐标
        return SCNVector3.positionTrasform(result.worldTransform)
    }

SCNVector3 + Extension

 //  拿到镜头的坐标
    static func positionTrasform(_ tranform: matrix_float4x4) -> SCNVector3 {

        return SCNVector3Make(tranform.columns.3.x, tranform.columns.3.y, tranform.columns.3.z)
}
知识补充
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个基于ARFoundation的AR项目的制作教程: 步骤1:安装Unity和ARFoundation 首先,你需要安装Unity和ARFoundation。Unity是一款强大的游戏引擎,而ARFoundation是Unity的AR开发框架。你可以从Unity官网下载Unity,也可以从Unity Hub中进行安装。ARFoundation可以从Unity Package Manager中获取。 步骤2:创建新项目 打开Unity并创建一个新项目。在创建项目时,请确保选择3D项目模板。 步骤3:导入ARFoundation 在Unity中打开Package Manager窗口,搜索ARFoundation并安装它。ARFoundation需要依赖于Unity的XR插件,所以你还需要安装XR插件。 步骤4:创建AR场景 创建一个新的场景,并将AR Session Origin和AR Session组件拖放到场景中。AR Session Origin是AR场景中对象的父对象,AR Session用于管理AR会话。 步骤5:添加ARKit或ARCore支持 ARFoundation支持ARKit和ARCore两种AR平台,你需要根据你的设备选择其中一个。如果你的设备是iOS设备,则选择ARKit支持;如果是Android设备,则选择ARCore支持。 步骤6:添加AR摄像头 将AR Camera组件添加到场景中。AR Camera用于捕捉摄像头视频,并将它与AR场景中的对象进行匹配。 步骤7:添加AR对象 在场景中添加你想要在AR场景中显示的对象。你可以添加3D模型、粒子效果、UI元素等。 步骤8:测试AR场景 在Unity编辑器中,点击播放按钮以测试AR场景。如果一切正常,你应该能够看到AR对象在现实世界中出现。 步骤9:构建并部署AR应用程序 完成AR场景后,你需要将其构建为可在设备上运行的应用程序。构建过程可能因设备、平台和应用程序类型而异。在构建之后,你可以将应用程序部署到设备上进行测试。 这是一个基于ARFoundation的AR项目的制作教程。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值