zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/strengthen/p/10052565.html
Copyright © 2011-2022 走看看