精华内容
下载资源
问答
  • ARKit,AR场景创建工具包,在基础包上添加自己想要添加的Object。适用于 IOS11及以上,iPhone 6s及以上,Unity 5.6及以上,Xcode 9 及以上。
  • ARKit iOS系统框架简介

    2018-01-11 08:53:06
    iOS11系统上,ARKit正式成为iOS系统框架,让开发者能够使用OC或swift语言就能开发AR-app,看起来的确有点小炫酷。 一、AR是如何工作的? 创建一个现实和虚拟空间之间的对应关系,arkit使用的技术称为视觉惯性...
    IDE要求:Xcode9
    系统要求:iOS11
    手机要求:6s及以上

    AR(Augmented Reality),即增强现实技术,并不是新技术。在iOS11系统上,ARKit正式成为iOS系统框架,让开发者能够使用OC或swift语言就能开发AR-app,看起来的确有点小炫酷。
    一、AR是如何工作的?
    创建一个现实和虚拟空间之间的对应关系,arkit使用的技术称为视觉惯性测距。这个过程结合了从iOS设备的运动传感硬件与设备的摄像头获取到的图像。arkit识别具有显著特征的场景图像,跟踪在视频帧之间的特征差异的位置,该信息与运动传感数据比较。从而获得一个高精度的设备的位置和运动模型。世界跟踪还分析和理解场景的内容。使用命中测试方法(参见arhittestresult类)找到对应于相机图像中某个点的真实世界的表面。如果启用planedetection在您的会话配置设置,arkit检测平面在相机的图像和报告他们的位置和尺寸。让您与虚拟内容交互。

    二、注意点
    1.世界追踪需要清晰的图像。当相机看不到细节时,例如当相机指向空白的墙壁或场景太暗时,跟踪质量就会降低。
    2.设备缓慢地移动,ARKit能更好地解析场景。但运动过快或晃动过猛会导致模糊图像,设备与实物之间的距离太远也会降低跟踪质量。ARCamera类提供跟踪状态原因信息,您可以使用它来开发用户界面,该用户界面告诉用户如何解决低质量的跟踪情况。
    3.允许平面检测的时间产生明确的结果,并禁用平面检测时,你有你需要的结果。

    三、类别简介
    1.第一步
    ARSession
    基础类。管理设备相机和运动跟踪的类。它从设备硬件读取信息,分析相机采集到的图像信息,从而将现实世界和虚拟模型建立关系。

    2.配置
    所有AR配置都建立了设备所在的真实世界与虚拟三维坐标空间之间的对应关系,您可以在其中建模。当应用程序与实时摄像机图像一起显示该内容时,用户体验到你的虚拟内容是现实世界的一部分。创建和保持空间之间的这种对应关系需要跟踪设备的运动。
    ARSessionConfiguration
    基础配置。追踪设备方向。
    此类追踪设备三自由度(3DOF)的移动:具体来说,包括三个旋转轴(横滚、俯仰、偏航)。
    ARSessionConfiguration在iOS所有设备上都通用,在特定设备上获得更近一步的AR体验,可以使用子类ARWorldTrackingSessionConfiguration。
    ARWorldTrackingSessionConfiguration
    可以追踪设备的位置、方向,并能检测摄像头采集到的真实世界的表面。
    此类追踪设备六自由度(3DOF)的移动:具体而言,旋转轴(横滚、俯仰、偏航)和三轴平移(在 X,Y,和Z上的移动)。

    3.标准view
    ARSKView:在3D空间里展现2D内容的view
    ARSCNView:在相机采集到的图像里展示3D模型的view

    4.真实世界的物体和位置
    ARAnchor:真实世界的位置和方向,使用它的方法驾到ARSession里面。
    ARPlaneAnchor:在ARSession中检测到真实世界平面的位置和方向的信息。
    ARHitTestResult:在AESession中相机采集到的图像view上某个点的信息

    5.相机和场景信息
    ARFrame:一个正在运行的ARSession连续地从设备摄像机捕获视频帧。对于每一帧,arkit分析图像,同时根据从运动传感硬件返回的数据来判断设备的实际位置信息。arkit发送这些跟踪信息和成像参数给ARFrame对象。
    ARCamera:在ARSession中捕获的相机位置和图像特征的信息。
    ARLightEstimate:在ARSession中与捕获的场景照明信息。
    展开全文
  • <div><p>This PR adds an example which uses ARKit with Twilio Video. This project was originally authored by Lizzie Siegle as a part of a blog post....twilio/video-quickstart-ios</p></div>
  • Awesome-iOS-ARKitiOS ARKit演示
  • ios arkitIn this tutorial, we’ll be developing our first Augmented Reality iOS Application using ARKit and SceneKit. 在本教程中,我们将使用ARKit和SceneKit开发第一个增强现实iOS应用程序。 Pre-...

    ios arkit

    In this tutorial, we’ll be developing our first Augmented Reality iOS Application using ARKit and SceneKit.

    在本教程中,我们将使用ARKit和SceneKit开发第一个增强现实iOS应用程序。

    Pre-requisites:先决条件:
    • XCode 9 or above

      XCode 9或以上
    • iPhone 6s or above since ArKit requires A9 processor.

      iPhone 6s或更高版本,因为ArKit需要A9处理器。
    • iOS 11 or above.

      iOS 11或更高版本。

    ARKit简介 (Introduction to ARKit)

    • ARKit library was introduced by Apple in WWDC 2017.

      Apple在WWDC 2017中引入了ARKit库。
    • It allows developers to build Augmented Reality Applications.

      它允许开发人员构建增强现实应用程序。
    • Augmented Reality Applications allows us to view virtual objects in the real environment through the camera.

      增强现实应用程序使我们可以通过相机在真实环境中查看虚拟对象。
    • Augmented Reality is like a mixture of Virtual Reality and the Real World.

      增强现实就像虚拟现实和现实世界的混合体。
    • We can place either 2D or 3D objects in the ARKit scene. For 2D objects, SpriteKit iOS library is used. For 3D objects, SceneKit is used.

      我们可以在ARKit场景中放置2D或3D对象。 对于2D对象,使用SpriteKit iOS库。 对于3D对象,使用SceneKit。

    The basic Augmented Reality iOS app that we’ll be building next will use SceneKit.

    接下来要构建的基本增强现实iOS应用将使用SceneKit。

    3D Models are of the format DAE and SCN.

    3D模型的格式为DAESCN

    We can create a customize 3D models using the free Blender Software.

    我们可以使用免费的Blender软件创建自定义3D模型。

    Let’s get started with the development now.

    现在开始开发。

    iOS ARKit入门 (Getting Started with iOS ARKit)

    Launch your XCode and create a new project. Make sure that you’ve selected the template as Augmented Reality App for this tutorial.

    启动您的XCode并创建一个新项目。 确保已为本教程选择了模板作为“增强现实应用程序”。

    On the next screen, ensure that you’ve selected SceneKit.

    在下一个屏幕上,确保已选择SceneKit。

    Now XCode creates your first ARKit project.

    现在,XCode创建您的第一个ARKit项目。

    iOS ARKit教程项目结构 (iOS ARKit Tutorial Project Structure)

    There’s a ship.scn 3D sample model created.

    创建了一个ship.scn 3D样本模型。

    The 3D model is some distance away from the origin. This can be altered from the attributes panel on the right side.

    3D模型离原点有些距离。 可以从右侧的属性面板更改此设置。

    On MainStoryboard has the SceneView already linked to the ViewController.

    在MainStoryboard上,SceneView已链接到ViewController。

    The ViewController.swift has a boilerplate code in place to set the scn file and begin the AR tracking.

    ViewController.swift有一个样板代码,用于设置scn文件并开始AR跟踪。

    Let’s run this sample Augmented Reality App on a device.

    让我们在设备上运行此示例增强现实应用程序。

    On clicking run, you might get the following dialog in your XCode.

    ios arkit verify app

    单击运行时,您可能会在XCode中获得以下对话框。

    After trusting the app from the settings following is the output of the application:

    从设置信任应用程序之后,以下是应用程序的输出:

    WOW! The ship 3D model is displayed on the screen.

    哇! 屏幕上显示了船用3D模型。

    But where is the origin? How can we change the size and position of the ship? How are the stats at the bottom being displayed? How do we add another 3D object on the Scene?

    但是起源在哪里? 我们如何改变船舶的大小和位置? 底部的统计数据如何显示? 我们如何在场景上添加另一个3D对象?

    We’ll be discussing each of these in the next section where we’ll play around with the Swift code as well.

    我们将在下一节中讨论其中的每一个,同时我们还将介绍Swift代码。

    The default code for the ViewController.swift is given below:

    ios arkit viewcontroller default code

    下面给出了ViewController.swift的默认代码:

    The ARSCNView class is the view used for displaying 3D objects in the AR SceneView. The ViewController class conforms to the protocol ARSCNViewDelegate.

    ARSCNView类是用于在AR SceneView中显示3D对象的视图。 ViewController类符合协议ARSCNViewDelegate。

    sceneView.showsStatistics = true is used to show the stats i.e. fps etc at the bottom of the screen.

    sceneView.showsStatistics = true用于在屏幕底部显示统计信息,例如fps等。

    sceneView.session returns an ARSession. On this, we run our AR tracking by setting the configuration in the run method.

    sceneView.session返回一个ARSession。 在此基础上,我们通过在run方法中设置配置来运行AR跟踪。

    修改模型的比例和位置 (Modifying the scale and position of the Model)

    We can modify the scale and position of the Model (ship in this case) in the following way:

    我们可以通过以下方式修改Model(在这种情况下为船)的比例尺和位置:

    The Position of the model is the position of the SCNNode relative to the camera.

    模型的位置是SCNNode相对于摄像机的位置。

    Positive x is to the right. Negative x is to the left.

    正数x在右边。 负x在左边。

    Positive y is up. Negative y is down.

    y为正。 负y下降。

    Positive z is backward. Negative z is forward.

    正数z向后。 负z是正向。

    iOS ARKit SCN Attributes

    Changing scale to make the model appear shorter

    更改比例以使模型显得更短

    In the above example, we’ve set the scn model to the origin.

    在上面的示例中,我们将scn模型设置为原点。

    添加一个SCNBox (Adding an SCNBox)

    Let’s add an SCNBox in our ViewController.swift below:

    让我们在下面的ViewController.swift中添加一个SCNBox:

    import UIKit
    import SceneKit
    import ARKit
    
    class ViewController: UIViewController, ARSCNViewDelegate {
    
    @IBOutlet var sceneView: ARSCNView!
    override func viewDidLoad() {
            super.viewDidLoad()
            
            // Set the view's delegate
            sceneView.delegate = self
            
            // Show statistics such as fps and timing information
            sceneView.showsStatistics = true
            sceneView.debugOptions = ARSCNDebugOptions.showWorldOrigin
            
            // Create a new scene
            let scene = SCNScene(named: "art.scnassets/ship.scn")!
            
            // Set the scene to the view
            sceneView.scene = scene
            addBox()
        }
        
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            
            // Create a session configuration
            let configuration = ARWorldTrackingConfiguration()
    
            // Run the view's session
            sceneView.session.run(configuration)
        }
        
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            
            // Pause the view's 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) {
            // Present an error message to the user
            
        }
        
        func sessionWasInterrupted(_ session: ARSession) {
            // Inform the user that the session has been interrupted, for example, by presenting an overlay
            
        }
        
        func sessionInterruptionEnded(_ session: ARSession) {
            // Reset tracking and/or remove existing anchors if consistent tracking is required
            
        }
        
        func addBox() {
            let box = SCNBox(width: 0.05, height: 0.05, length: 0.05, chamferRadius: 0)
            
            let boxNode = SCNNode()
            boxNode.geometry = box
            boxNode.position = SCNVector3(0, 0, -0.2)
            sceneView.scene.rootNode.addChildNode(boxNode)
        }
    }

    sceneView.debugOptions = ARSCNDebugOptions.showWorldOrigin is used to show the origin and the coordinate lines in the camera scene.

    sceneView.debugOptions = ARSCNDebugOptions.showWorldOrigin用于显示摄像机场景中的原点和坐标线。

    In the addBox() function we add a SCNNode of the shape box to our Scene in the ARSCNView.

    在addBox()函数中,将形状框的SCNNode添加到ARSCNView中的场景中。

    The output when the above application is run is given below:

    运行上述应用程序时的输出如下:

    So our SCNBox is set in front of the origin and is colored white.

    因此,我们的SCNBox设置在原点的前面,并显示为白色。

    更改SCNBox的背景颜色 (Changing the background color of the SCNBox)

    SCNNode above is like a SCNBox and has six sides. Lets set a different color on each side.

    上面的SCNNode就像一个SCNBox,具有六个侧面。 让我们在每侧设置不同的颜色。

    Change the addBox() method to the following:

    将addBox()方法更改为以下内容:

    func addBox() {
            let box = SCNBox(width: 0.05, height: 0.05, length: 0.05, chamferRadius: 0)
            
            let boxNode = SCNNode()
            boxNode.geometry = box
            boxNode.position = SCNVector3(0, 0, -0.2)
            
            let colors = [UIColor.green, // front
                UIColor.red, // right
                UIColor.blue, // back
                UIColor.yellow, // left
                UIColor.purple, // top
                UIColor.gray] // bottom
            
            let sideMaterials = colors.map { color -> SCNMaterial in
                let material = SCNMaterial()
                material.diffuse.contents = color
                material.locksAmbientWithDiffuse = true
                return material
            }
            boxNode.geometry?.materials = sideMaterials
            sceneView.scene.rootNode.addChildNode(boxNode)
        }

    We use the materials property on the box and set a different UI Color from the array on each side by mapping them to the respecitve SCNMaterial.

    我们使用盒子上的materials属性,并通过将它们映射到指定的SCNMaterial,从每一面的数组设置不同的UI颜色。

    The output of the application in action is given below. All the sides have a different color.

    实际应用程序的输出如下。 所有侧面都有不同的颜色。

    This brings an end to this ARKit Tutorial. You can download the project from the link below:

    这结束了本ARKit教程。 您可以从下面的链接下载项目:

    Reference: ARKit Docs

    参考: ARKit文档

    翻译自: https://www.journaldev.com/21584/ios-arkit-tutorial-augmented-reality-app

    ios arkit

    展开全文
  • iOS ARKit

    千次阅读 2018-02-11 18:13:45
    AR开发向来不是简单的...前段时间奉老大之命研究iOS的AR技术,并做了技术分享,现在将分享的内容写一下,也好好整理一番。 1. ARKit软硬件条件 我们先看一下开发AR的软硬件条件: Processor:A9orlater iOSsyst...

    这里写图片描述
    AR开发向来不是简单的事,需要掌握很多知识,如上图所示的知识,你都要懂。 2017年WWDC大会发布了ARKit库,可以很方便的开发AR应用,并且演示效果非常好。前段时间奉老大之命研究iOS的AR技术,并做了技术分享,现在将分享的内容写一下,也好好整理一番。

    1. ARKit软硬件条件

    我们先看一下开发AR的软硬件条件:
    

    Processor:A9orlater
    iOSsystem:iOS11.0+
    Xcode:9.0+
    Set arkitkey in Info.plist
    Set Camera Usage Description in Info.plist(ARAPP)
    Devicesupportsessionconfiguration:isSupported
    处理器要求A9以上,所以iPhone6 是不支持的,至少iPhone6s以上;iOS系统需要升级到iOS11.0以上; 开发工具Xcode需要更新到9.0以上;并且需要在Info.plist中设置arkitkey;可以使用session的configure属性isSupported判断是否iPhone是否支持AR。

    2. ARKit处理过程

    图1. ARKit处理过程

    上图展示了ARKit从捕获真实世界的信息到展示的过程,摄像机首先捕获真实世界的图片,图片是一帧一帧的过来的,每帧图片都有一个相对应的时间戳,用来标识图片的先后顺序。同时利用世界追踪(world tracking,原谅直译)技术,先通过追踪手机的平移旋转获取摄像机的粗糙位置,再通过捕获真实世界图像的特征点得到摄像机的精确位置,从而可以实时获取摄像机的位置。将捕获真实世界的图像和摄像机位置合成得到场景解析,将场景解析和我们制作的虚拟场景合成并渲染就可以得到虚拟现实了,再将其显示出来即可。

    3. ARKit架构

    这里写图片描述

    上图展示了ARKit的基本架构,ARKit可以支持2D、3D的场景,2D场景需要加载ARSKView,3D场景需要加载ARSCNView。两者除了虚拟场景制作不同之外,其他都是相同的。2D场景使用SpriteKit制作,3D使用SceneKit制作,我们以3D场景为例做介绍。

    开发3D ARKit需要使用ARSCNView,ARSCNView已经将开发AR的所有API封装了,可以方便的使用。在ARSCNView中,session是管理类,捕获真实世界、世界追踪、渲染都由session完成,session在初始化时必须为其提供configuration才行。scene是负责做虚拟化的类,每个虚拟物体都是一个节点(SCNNode),所有节点都有一个公共父节点(rootNode),每个节点也可以添加自己的子节点。可以为每个节点添加动画效果,可以使用core animation添加,也可以使用其自带的runAction添加。可以在ARSCNView中添加Anchor,可以通过session手动添加,也可以打开平面检测自动添加。

    除了session、scene之外,ARSCNView还有很多属性可以设置,这里只介绍几种常见的:

    • showsStatistics bool类型,是否显示统计信息;
    • debugOptions debug类型,如选择ARSCNDebugOptionShowFeaturePoints,显示捕获真实世界的特征值;
    • autoenablesDefaultLighting bool类型,是否增加补偿光;
    • allowsCameraControl bool类型,开启ARSCNView中的默认手势
    • rendersContinuously bool类型,是否实时渲染。

      ARSCNView中的三种代理分别为:1. ARSCNViewDelegate,2.SCNSceneRendererDelegate,3.ARSessionObserver。ARSCNViewDelegate是关于在平面上添加节点的,具体如下:

    • - (nullable SCNNode )renderer:(id )renderer nodeForAnchor:(ARAnchor )anchor; 在Anchor上添加节点。

    • - (void)renderer:(id )renderer didAddNode:(SCNNode )node forAnchor:(ARAnchor )anchor;
    • - (void)renderer:(id )renderer willUpdateNode:(SCNNode )node forAnchor:(ARAnchor )anchor;
      更新节点。
    • \ - (void)renderer:(id )renderer didUpdateNode:(SCNNode )node forAnchor:(ARAnchor )anchor;更新节点。
    • \ - (void)renderer:(id )renderer didRemoveNode:(SCNNode )node forAnchor:(ARAnchor )anchor;移除节点

    SCNSceneRendererDelegate是渲染代理,ARSessionObserver是session相关的代理,在这里不详细说明,开发时可以查看官方文档。

    4. ARSession

    这里写图片描述
    上图展示了Session的相关技术点,与session两个重要的技术点是捕获真实世界和世界追踪。通过ARSessionConfiguration设置世界追踪的类型,世界追踪技术得到摄像机精确位置,并将其存入currentFrame中;捕获真实世界是获得真实世界的图像,图像是一帧一帧的读入的,每帧图像都有相应的时间戳,用来标识图像先后顺序,并将其存入currentFrame。

    4.1 AR中的坐标系统

    AR中的坐标系统系统是3维的,分前后上下左右3个维度,分别用X、Y、Z轴组成,如下图所示。
    这里写图片描述

    后置摄像机的位置永远对向Z轴的负方向,所以利用后置摄像头捕获真实世界时,虚拟物体需要放置到Z轴的负方向处,否则无法看到虚拟物体。图中的坐标系是session运行时生成的原坐标系,该坐标系的原点是固定不变的。摄像机开始的位置就在原坐标系的原点,随着摄像机的移动旋转,其位置也在不断变化,但一直是在原坐标系呢的,添加的虚拟物体也是在原坐标系内的。

    4.2 世界追踪与捕获真实世界

    上一节介绍了AR的坐标系,并且指出摄像机和虚拟物体都是在原坐标系内的,虚拟物体的位置可以由我们自己指定,但是摄像机的实时位置应该怎么确定呢?用到的技术便是世界追踪。
    这里写图片描述

    上图红色部分展示了世界追踪过程,蓝色展示了捕获真实世界的过程。底层CMMotionManger负责世界追踪,通过获取的平移旋转信息获取摄像机的粗略位置,再通过捕获的真实世界图像中的特征点得到摄像机的精确位置,将该位置以ARCamera的形式存入session的currentFrame中。

    底层AVCaptureSession负责捕获真实世界的图像,每帧图像对应一个时间戳,用以标记图像先后顺序。将捕获的图像信息存入session中的currentFrame中,等渲染时调用。以下是currentFrame中的属性:

    • timestamp 图像时间戳
    • capturedImage 捕获的图像
    • capturedDepthData 人脸追踪使用的数据
    • camera 存摄像机位置
    • anchors 场景中的平面集
    • lightEstimate 光线估计
    • rawFeaturePoints 特征点

    在设置世界追踪时,有三种类型可选,分别如下:

    • ARWorldTrackingConfiguration 提供六种自由度的追踪方向
    • AROrientationTrackingConfiguration 提供三种自由度的追踪方向
    • ARFaceTrackingConfiguration 前置摄像头追踪人脸的细节

      以ARWorldTrackingConfiguration为例,可以对其做如下设置:

    • isSupported 检测手机是否支持AR;

    • worldAlignment 设置原坐标系与真实世界的联系,有三种可以选择,ARWorldAlignmentGravity—Y轴的负方向与重力方向一致,ARWorldAlignmentGravityAndHeading—Y轴的负方向与重力方向一致,Z轴的负方向与北极方向一致,ARWorldAlignmentCamera—原坐标系各个与摄像机方向一致;
    • lightEstimationEnabled 是否开启光线估计,开启光线估计,则虚拟物体的光线与真实世界的光线一致,否则虚拟物体与真实世界在光线方面不协调;
    • providesAudioData bool类型,值为YES时,则捕获真实世界的音频并可以添加音频。

      上文说ARWorldTrackingConfiguration可以提供六个自由度的追踪,这六个自由度如下图所示:
      这里写图片描述
      分别为:

    • (1). 沿X轴前后移动
    • (2). 沿Y轴上下移动
    • (3). 沿Z轴左右移动
    • (4). Yawing 绕Y轴旋转
    • (5).Pitching 绕X轴旋转
    • (6).Rolling 绕Z轴旋转
      AROrientationTrackingConfiguration只提供三种旋转自由度的追踪,即(4)、(5)、(6)。一般情况下使用ARWorldTrackingConfiguration,我还没遇到过AROrientationTrackingConfiguration的例子?,但是存在即合理,肯定有场景能遇到的。

    4.3 平面检测

    这里写图片描述
    上图展示了平面检测,如果在configuration中设置打开平面检测,则session会自动检测真实世界中的平面,检测到平面之后就会生成一个ARAnchor,我们就可以在平面上添加各样的节点。系统生成的平面如下图所示,图中黄色点表示特征点。
    这里写图片描述

    有时我们希望生成我们自定义的平面,这时就需要单独建立平面类,并在渲染的代理中生成平面,如下列代码所示:

    - (void)renderer:(id<SCNSceneRenderer>)renderer didAddNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor {
        ARPlaneAnchor *planeAnchor = anchor;
        if (!anchor || ![anchor isKindOfClass:[ARPlaneAnchor class]]) {
            return;
        }//如果是平面,则生成我们自定义的平面,并添加
        Plane *plane = [[Plane alloc] initWithAnchor:planeAnchor isHidden:NO];
        plane.name = PLANE;
        node.name = PLANE;
        NSString *key = [anchor.identifier UUIDString];//每个平面都有一个唯一的ID
        [self.planes setObject:plane forKey:key];//添加到平面集合里,方便管理
        self.Presentplane = plane;
        [node addChildNode:plane];
    }
    
    - (void)renderer:(id <SCNSceneRenderer>)renderer didRemoveNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor {
        NSString *key = [anchor.identifier UUIDString];
        [self.planes removeObjectForKey:key];//从平面集合里移除平面
    }
    
    - (void)renderer:(id <SCNSceneRenderer>)renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor {
        Plane *plane = [self.planes objectForKey:anchor.identifier];
        if (plane == nil) {
            return;
        }
        [plane updateWithAnchor:anchor];//发现两个平面是同属一类,将小平面合并到大平面里
    }

    SCNScene

    下图展示了SCNScene的相关技术,场景中的虚拟物体是有一个一个的节点(SCNNode)组成的。物体可以使用专业的3D建模软件制作,制作好之后在工程中导入.scn文件即可。如果没有专业的3D建模工程师去帮忙设计的话,就只能自己用代码写了,我们就是苦逼的后者。。。
    每个scene中会有一个root节点,该节点就在原坐标系的原点,不能做任何的修改。scene中所有节点的公共父节点都是root节点,节点可以有自己的子节点,节点的组成是树形结构的。每个节点都有自己的坐标系,其坐标系原点的位置就是在其父节点坐标系的位置,如下图所示
    这里写图片描述
    在生成节点时,最好指设置name属性,以方便交互。系统为我们提供了很多几何体来生成节点,比如平面、长方体、球体等。我们还可以使用两种方法给节点添加动画,core animation或者runAction,这里不详细介绍了。
    这里写图片描述

    怎样和节点做交互呢?答案是hitTest方法,如下图所示,当点击屏幕时,会在点击处发出一条射线出来,射线穿过的节点都将被封装在数组中返回,在使用时通常取数组的第一个元素。具体使用可以参考下面的代码。
    这里写图片描述

        CGPoint point = [gestureReconizer locationInView:self.sceneView];
        NSArray *hitResults = [self.sceneView hitTest:point options:nil];
        if (hitResults && hitResults.count > 0) {
            return hitResults.firstObject;
        } else {
            return nil;
        }
    展开全文
  • ios-arkit, 基于iOS的增强现实引擎 iOS增强现实引擎我很高兴与大家分享我一直在开发的这个引擎。 它是基于的iPhone ARKit 。##Core 特性:从 5.0开始完全兼容所有版本的iOS 。支持所有方向。基于距离和方向缩放和...
  • iOS ARKit进行本机绑定。 用React Native Arkit制成: 故事:AI驱动的室内设计助手( ) 教程: 示例项目: : 注意:iOS 11上只有具有A9或更高版本处理器(iPhone 6s / 7 / SE / 8 / X,iPad 2017 / Pro)...
  • 第一次使用ARKit时,发现切换平台时switch platform是灰色的,无法点击,当时尝试了旁边的open download page也不行,发现是没有ios支持工具。 点击unity版本上的小点点,应该会有添加模块的选项,但是我是在...

    第一次使用ARKit时,发现切换平台时switch platform是灰色的,无法点击,当时尝试了旁边的open download page也不行,发现是没有ios支持工具。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    点击unity版本上的小点点,应该会有添加模块的选项,但是我是在unity官网直接安装的,不是通过hub安装,所以缺少相应模块。
    在这里插入图片描述
    在这里插入图片描述
    从hub上重新下载unity后,选择想添加的ios模块,就能转换到ios平台。
    在这里插入图片描述

    展开全文
  • ARKit support for iOS via Unity-ARKit-Plugin

    千次阅读 2017-06-27 14:02:53
    unity 使用iOSARkit  https://forum.unity3d.com/threads/arkit-support-for-ios-via-unity-arkit-plugin.474385/#post-3096543
  • iOSiOS.ARKit

    2017-10-10 10:33:26
    ARKit 初探
  • iOS精选源码 自定义视图弹出实现方案 仿写百思不得姐 ARKit,距离感应,AR尺子 iOS传感器集锦 AR太阳系,动画与光线处理,ARKit iOS启动页广告JYJAdViewController Theme...
  • iOS11系统上,ARKit正式成为iOS系统框架,让开发者能够使用OC或swift语言就能开发AR-app,看起来的确有点小炫酷。 一、AR是如何工作的? 创建一个现实和虚拟空间之间的对应关系,arkit使用的技术称为视觉惯性测距...
  • 掌握iOSARKit

    2017-07-26 11:44:48
    我非常高兴地宣布,我的课程“ iOS的精通ARKit ”现已在Udemy上提供。 本课程涵盖了有关构建出色的ARKit应用程序所需的所有知识。 查看以下课程促销: 我相信您和我一样对ARKit感到兴奋。 不要等待片刻,请使用下面...
  • ios arkit原理理解

    千次阅读 2018-03-14 15:12:42
    arkit的效果案例 ...iphone6s以上的设备,ios11以上 2)只支持水平平面检测,不支持竖直平面检测。(支持竖直平面检测应该只是早晚的问题) 3)目前暂未开放特征点提取和识别能力 4)相机采景模糊,光照不足,
  • iOS ARKit开发支持scn、dae格式的文件,其他格式的3d模型文件并不能用iOS ARKit打开,使用此插件为3DMAX导出iOS AR模型
  • IOS ARKit开发文档

    万次阅读 2017-06-06 10:23:07
    ARKit 引言:在今天早上凌晨举行的WWDC2017大会上,ARKit无疑是一个亮点。苹果在自家的开发组件中加入ARKit,降低了增强现实的开发难度,效果却提高了很多,并且结合自家的硬件,使最终产生... Integrate iOS device
  • IOS ARKit 最新文档

    2017-08-01 15:15:49
    引言:在今天早上凌晨举行的WWDC2017大会上,ARKit无疑是一个亮点。苹果在自家的开发组件中加入ARKit,降低了增强现实的开发难度,效果却提高了很多,并且结合自家的硬件,使最终产生非常棒的视觉... Integrate iOS de
  • 点击上方“iOS开发”,选择“置顶公众号”关键时刻,第一时间送达!作者:Soulghost链接:https://juejin.im/post/5b801cede51d45...
  • iOS ARKit的React Native绑定
  • ios-ARKit 基础.zip

    2019-07-11 19:13:14
    ARKit 基础 可以github 下载学习,相互提高 https://github.com/cangswift/iOS-ARKit.git
  • iOS计算机视觉—ARKit

    2018-10-22 08:22:57
    Apple 公司在 2017 年 6 月正式推出了 ARKitiOS 开发者可以在这个平台上使用简单便捷的 API 来开发 AR 应用程序。为了获得 ARKit 的完整功能,需要 A9 及以上芯片。其实也就是大部分运行 iOS 11 的设备,包括 ...
  • swift-iOS11ARKit(3DofWolf

    2019-08-15 11:56:13
    iOS11 ARKit (3D of Wolf
  • iOS ARKit推流到WebRTC

    千次阅读 2018-10-07 00:20:19
    本文介绍了iOS使用WebRTC推ARKit合成流的方法,包含核心代码。
  • 摘 要 文章主要通过使用 UE4 中的 ARKIT 插件在 iOS 平台开发 AR 应用程序 ,并在 UE 为我们提供的 Handheld AR 模版基础之上 ,添加了图像检测功能。以该应用程序为例介绍了 iOS 平台开发的准备和 UE4 中图像检测...
  • iOS11 初识ARKit

    千次阅读 2017-09-04 00:16:14
    iOS 11  支持的设备SE、6s、6sp、7、7sp。。。。 没有的小伙伴可以到苹果官网下载 https://developer.apple.com/download/ ,目前是beta6 安装 iOS 11 iPhone 打开https://developer.apple.com/download/,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 611
精华内容 244
关键字:

arkitios