• [Xcode 实际操作]七、文件与数据-(21)ARKit增强现实框架的使用


    目录:[Swift]Xcode实际操作

    本文将演示ARKit增强现实框架的使用。

    创建一个新的项目:【Create a new Xcode project】

    ->在打开的模板选择中,选择增强现实应用模板【Augmented Reality App】

    ->【Next】->【Product Name】:ARDemo 。保持其他参数不变

    ->【Next】->选择项目存放目录->【Create】

    在左侧的文档框架区,点击查看模板自带的场景资源【art.scnassets】

    在右侧的属性面板,可以看出场景的Y轴朝上,X轴朝右,Z轴向内。

    并且三维模型优先使用同名的、压缩后的贴图。

    在资源【art.scnassets】文件夹下,包含一个三维场景【ship.scn】,和一个贴图文件【texture.png】

    点击打开三维场景【ship.scn】。

    当前的三维场景拥有一驾喷气式飞机的三维模型,场景在默认情况下处于转盘模式。

    点击右下角第一个图标,弹出操作列表,选择【Fly】

    鼠标按下并向下方拖动,观察飞机模型的位置变化。

    点击右下角第一个图标,弹出操作列表,选择【Arcball】轨迹球选项

    鼠标按下并向下方拖动,观察飞机模型的位置变化。

    点击右下角第一个图标,弹出操作列表,选择【Pan】平移选项

    鼠标按下并向下方拖动,观察飞机模型的位置变化。

    点击右下角第一个图标,弹出操作列表,选择【Truck】转向选项

    鼠标按下并向右侧拖动,观察飞机模型的位置变化。

    接着修改三维场景的【显示模式列表】,点击右下角第四个图标,

    勾选列表中的【Wireframe】线框选项:使三维模型处于线框的显示状态。

    勾选列表中的【Grid】网格选项:可以在三维场景中显示辅助的网格线。

    在列表外部点击,关闭【显示模式列表】

    接着修改三维场景的【视图类型】,点击左下角第四个图标,弹出【视图类型】列表

    【Top】:顶视图,模拟摄像机从顶部向下看的效果。

    【Bottom】:底视图

    【Left】:左视图

    【Right】:右视图

    【Front】:前视图

    【Back】:后视图

    接着点击三维物体的贴图文件【texture.png】

    在贴图文件中,包含了三维飞机模型在多个视图中的投影所对应的贴图。

    接着点击故事版文件【Main.storyboard】

    在故事版中包含了一个三维场景视图,点击选择该视图对象

    打开右侧的属性设置面板。

    三维场景视图同样拥有一些属性,可以设置它的名称、行为、渲染参数和动画参数等。

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

    在视图加载完成的方法中,分别设置了:

    1.三维场景视图的代理对象

    2.统计状态

    3.需要加载的三维场景

    在视图即将显示或消失的方法中,对三维场景视图的会话周期,进行了不同方式的调用。

    接着打开模拟器列表【ARDDemo>Generic iOS Device】

    在列表里选择一款真机设备,将在真机设备上运行该应用程序。

    运行程序后,点击允许应用程序访问设备。

    此时在屏幕上显示了一个三维的飞机模型。

    可以移动手机,在各个角度查看飞机的状态。

    点击手机屏幕左下角打开状态面板。

    在状态面板中显示了刷新率、面数等信息。

    使用【Command】+【Tab】切换并打开浏览器软件

    输入苹果提供的三维场景包的下载地址:

    https://developer.apple.com/documentation/arkit/building_your_first_ar_experience

    压缩包下载后,将自动解压并打开解压后的文件夹。

    找到三维场景模型的资源文件Resources->Models.scnassets

    将三维场景模型的资源文件夹拖动到自己的项目中

    点击【Finish】确认文件夹的导入

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

    重新修改一下三维场景的代码

     1 import UIKit
     2 import SceneKit
     3 import ARKit
     4 
     5 class ViewController: UIViewController, ARSCNViewDelegate {
     6 
     7     @IBOutlet var sceneView: ARSCNView!
     8     
     9     override func viewDidLoad() {
    10         super.viewDidLoad()
    11         
    12         // Set the view's delegate
    13         //三维场景视图的代理对象
    14         sceneView.delegate = self
    15         
    16         // Show statistics such as fps and timing information
    17         //统计状态
    18         sceneView.showsStatistics = true
    19         
    20         // Create a new scene
    21         //需要加载的三维场景
    22         //加载三维场景的代码,修改为已添加的三维场景模型的资源文件
    23         let scene = SCNScene(named: "Models.scnassets/chair/chair.scn")!
    24         
    25         // Set the scene to the view
    26         sceneView.scene = scene
    27     }
    28 
    29     override func viewWillAppear(_ animated: Bool) {
    30         super.viewWillAppear(animated)
    31         
    32         // Create a session configuration
    33         let configuration = ARWorldTrackingConfiguration()
    34         // Run the view's session
    35         sceneView.session.run(configuration)
    36     }
    37     
    38     override func viewWillDisappear(_ animated: Bool) {
    39         super.viewWillDisappear(animated)
    40         
    41         // Pause the view's session
    42         sceneView.session.pause()
    43     }
    44     
    45     override func didReceiveMemoryWarning() {
    46         super.didReceiveMemoryWarning()
    47         // Release any cached data, images, etc that aren't in use.
    48     }
    49 
    50     //在视图即将显示或消失的方法中,对三维场景视图的会话周期,进行了不同方式的调用。
    51     
    52     func session(_ session: ARSession, didFailWithError error: Error) {
    53         // Present an error message to the user
    54         
    55     }
    56     
    57     func sessionWasInterrupted(_ session: ARSession) {
    58         // Inform the user that the session has been interrupted, for example, by presenting an overlay
    59         
    60     }
    61     
    62     func sessionInterruptionEnded(_ session: ARSession) {
    63         // Reset tracking and/or remove existing anchors if consistent tracking is required
    64         
    65     }
    66 }
  • 相关阅读:
    IIS6.0中,使用其它用户运行IIS
    c++构造函数详解
    Java创建文件夹及文件
    三大范式及存储方式
    对新型软件程序语言及架构的一点讨论
    C++虚函数解析
    验收测试驱动开发:ATDD实例详解
    什么是父路径及开启的方法
    note:全局配置visual studio 2010 头文件目录
    怎么把二级域名重定向到主域名
  • 原文地址:https://www.cnblogs.com/strengthen/p/10052565.html
Copyright © 2020-2023  润新知