美文网首页
AR初体验

AR初体验

作者: 木子心语 | 来源:发表于2017-09-05 14:44 被阅读0次

首先打开Xcode-beta

选择一个模板为你项目.png

然后next为新项目选择选项

为新项目选择选项.png

创建项目

创建项目.png

项目创建后,先编译编译一下,会报错误,此时选择team,再进行编译就ok了.


选择team.png
art.scnassets

包含两个文件:ship.scn和texture.png

ship_scn.png texture_png.png
main.storyboard
在main.storyboard添加ARSCNView.png
在main.storyboard添加ARSCNView,然后视图与ViewController.swift关联.
Info.plist
照相机使用描述.png
如果是sigleView视图创建的应用,请在info.plist中加入Camera Usage Description,
如果用AR模板创建的,会自动加入,无需担心.
ViewController.swift
示例:
//导入所需要的库
import UIKit
import SceneKit
import ARKit
class ViewController: UIViewController, ARSCNViewDelegate {
    //关联sceneView
    @IBOutlet var sceneView: ARSCNView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置视图的代理
        sceneView.delegate = self
        // 显示统计fps和时间等信息
        sceneView.showsStatistics = true
        // 创建一个场景
        let scene = SCNScene(named: "art.scnassets/ship.scn")
        // 设置场景到视图
        sceneView.scene = scene
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // 创建一个session配置
        let configuration = ARWorldTrackingConfiguration()
        // 运行session
        sceneView.session.run(configuration)
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        //停止视图session
        sceneView.session.pause()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }
    // MARK: - ARSCNViewDelegate
/*
    // Override to create and configure nodes for anchors added to the view's session.
    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        let node = SCNNode()
        return node
    }
*/
    func session(_ session: ARSession, didFailWithError error: Error) {
        // 向使用者发出一个错误信息   
    }
    func sessionWasInterrupted(_ session: ARSession) {
        // 通知用户会话已经中断
    }
    func sessionInterruptionEnded(_ session: ARSession) {
       //如果需要持续跟踪,重置跟踪或者删除已经存在的锚点
    }
}
接下来在原有代码上增加新功能

首先我们在ViewWillAppear方法中,创建一个手势,

let handGesutre=UITapGestureRecognizer(target:self,action:
#selector(ViewController.handtap(getstureRecongnizer:)))
view.addGestureRecognizer(handG);

然后创建handG方法,

@objc fun handtap(getstureR:UITapGestureRecognizer){
}

在方法中写入您的截屏操作,接下来我们一步一步来哦.
首先呢,我们先判断一下,首先我们先判断一下是否在当前Frame

guard let currentF = sceneView.session.currentFrame else {
return 
}

接下来呢,我们创建一张图片Photo,

let imageP = SCNPlane(width:sceneView.bounds.width /6000,
height:sceneView.bounds.width/6000)

创建完图片后,我们对图片进行渲染.对图片截图

imageP.firstMaterial?.diffuse.contents = sceneView.snapshot()

调整图片的亮度模式

imageP.firstMaterial?.lightingModel = .constant

接下来,我们创建一个节点,方便把图片显示在屏幕上

let planNode = SCNNode(geometry:imageP)

把节点添加到根节点

sceneView.scene.rootNode.addChildNode(planNode)

然后追踪相机的位置

var translate = matrix_identity_float4x4

在设置距离镜头10公分位置

xyz轴.png

从图中,可以屏幕的正前方是z轴的半轴

translate.columns.3.z = -0.1

改变节点位置

planNode.simdTransform = matrix_multiply(currentFrame.camera.transform,translate)
您试试吧,通过对屏幕的截屏,你可以在屏幕的正前方,可以看到飞机,点击屏幕后,可以看到一张图片悬浮在您屏幕的正前方.

相关文章

  • AR初体验

    首先打开Xcode-beta 然后next为新项目选择选项 创建项目 项目创建后,先编译编译一下,会报错误,此时选...

  • AR初体验

    今天参加了一个AR游戏的活动,拿着手机满城市跑,找寻线索、解锁下一关……最后腿已跑残。 谈谈游戏中的几点体会吧: ...

  • ARKit从入门到精通三部曲

    此文章为转载文章 ARKit从入门到精通(1)-ARKit初体验 1.1-AR技术简介 增强现实技术(Augmen...

  • ios AR技术初体验(easyAR)

    领导突然让我了解一下AR技术,是如何实现的。之前一直听说过,但从未尝试过,看来今天必须了解一下了!找了半天,也就e...

  • Facebook Spark AR Studio 初体验

    本来想着给Folo美剧增加AR的功能,但是在看相关文章的时候想到了Facebook的 RealityLab,进入主...

  • yii初体验(7-15)

    yii初体验(7)视图 yii初体验(8)模块 yii初体验(9) 小部件widgets yii初体验(10) 前...

  • 动画篇-layout动画初体验

    动画篇-layout动画初体验 动画篇-layout动画初体验

  • AR应用开发--EasyAR初体验(新手向)

    作者:hwj3747转载请注明 说明 随着智能化技术的火爆,可以预见:AR,VR,人工智能等技术将逐渐成为未来科技...

  • ARKit Apple官方文档02 AR初体验

    配置AR会话,并使用SceneKit或SpriteKit显示AR内容。 概观 当你使用ARSCNView 或 AR...

  • 劳动主题画报

    一、实践画报(含体验日记) _____初体验(如:记者初体验、医生初体验等) 说明: 1.利用假期亲身体验一项工作...

网友评论

      本文标题:AR初体验

      本文链接:https://www.haomeiwen.com/subject/fdsejxtx.html