道理篇
本文所用的代码在https://github.com/SquarePants1991/OpenGLESLearn.git的ARKit分支中。
iOS11推出了新框架ARKit,经由过程ARKit和SceneKit可以很便利的制造AR App。苹不雅也供给了AR根本的应用框架,你可以直接大年夜此开端你的AR App的开辟。

不过本系列文┞仿将应用OpenGL ES为ARKit供给衬着支撑,接下来我们先去懂得一下ARKit的理论相干常识。
处理并绑定好纹理后,为了包管不合屏幕尺寸下,纹理不被非等比拉伸,所以对viewport进行重了新计算[self setupViewport: CGSizeMake(imageHeight, imageWidth)];。接下来将ARKit计算出来的摄像机的变换赋值给self.cameraMatrix。留意ARKit捕获的图片须要扭转90度后才能正常显示,所以在设置Viewport时特意倒置了宽和高,并在最后对摄像机进行了扭转。
AR根本概念
AR最根本的概念就是将虚拟的计算机图形和真实情况浇忧⒛技巧。该技巧有很多种实现方法。
-
应用2D或者3D图形装潢人脸,常见于一些相机和视频类App,重要应用人脸辨认追踪迹巧。
-
基于标记的3D模型放置,比如基于AR的故事书,阴阳师的现世呼唤。标记可所以简单的黑框担保的标记,也可所以一张复杂图片的特点灯揭捉?练数据。如不雅你感兴趣可以前去ARToolKit,这是一个开源的AR框架,重要用于基于标记的AR。最出色ARToolkit6 Beta了,不知道有没有新的功能开放。
-
追踪真实情况的特点点,计算真实摄像机在真实情况的地位。所谓特点点,就是图片中灰度变更比较激烈的地位,所以想要更精准稳定的计算,就须要真实情况的色彩变更比较丰富。ARKit就是应用这种道理进行摄像机定位的。
世界追踪(WorldTracking)
经由过程追踪真实世界的特点点,计算真实摄像机地位并应用到3D世界的虚拟摄像机是AR实现中最重要的部分。计算结不雅的精确性直接影响到衬着出来的结不雅。ARKit应用ARSession来治理全部AR处理流程,包含摄像机地位的计算。
#pragma make - AR Control- (void)setupAR { if (@available(iOS 11.0, *)) { self.arSession = [ARSession new]; self.arSession.delegate = self; }}- (void)runAR { if (@available(iOS 11.0, *)) { ARWorldTrackingSessionConfiguration *config = [ARWorldTrackingSessionConfiguration new]; config.planeDetection = ARPlaneDetectionHorizontal; [self.arSession runWithConfiguration:config]; }}- (void)pauseAR { if (@available(iOS 11.0, *)) { [self.arSession pause]; }}ARHitTestResultTypeEstimatedHorizontalPlane,非精准方法计算出来竽暌闺重力垂直的平面。
应用ARSession的方法很简单,初始化,设置delegate,开启ARSession须要传入一个设备ARWorldTrackingSessionConfiguration,ARWorldTrackingSessionConfiguration代表AR体系会追踪真实世界的特点点,计算摄像机地位。苹不雅今后也有可能会出ARMarkerTrackingSessionConfiguration之类用来辨认追踪标记的设备吧。ARSession开启后会启动相机,并且会经由过程传感器感知手机地位。借用WWDC中的一张图。
ARSession综合相机捕获的视频流和地位信息生成一系列持续的ARFrame。
每个ARFrame包含了大年夜相机捕获的图片,相机地位相干信息等。在这个办法里我们须要绘制相机捕获的图片。根据相机地位等信息绘制3D物体等。
平面检测
ARKit供给了另一个很酷的功能,检测真实世界的平面,并供给一个ARPlaneAnchor对象描述平面的地位,大年夜小,偏向等信息。
- (void)runAR { if (@available(iOS 11.0, *)) { ARWorldTrackingSessionConfiguration *config = [ARWorldTrackingSessionConfiguration new]; config.planeDetection = ARPlaneDetectionHorizontal; [self.arSession runWithConfiguration:config]; }}膳绫擎的config.planeDetection = ARPlaneDetectionHorizontal;设置了检测平面的类型是程度。不过今朝也就只有章一?选项可以选。如不雅ARKit检测到了平面,会经由过程delegate中的办法- (void)session:(ARSession *)session didAddAnchors:(NSArray *)anchors供给数据给你。你可以断定ARAnchor是不是ARPlaneAnchor来断定是否检测到了平面。ARAnchor用来表示3D物体在真实情况的地位。你只要保持你的3D物体和ARAnchor的3D变换同步就能实现AR效不雅了。
Hit Test
Hit Test可以让你便利的在检测到的平面上放置物体。当你点击屏幕时,应用Hit Test可以检测出你点击的地位有哪些平面,并且供给ARAnchor用于设置放置物体的地位。

[frame hitTest:CGPointMake(0.5, 0.5) types:ARHitTestResultTypeExistingPlane];
应用ARFrame的hitTest办法,第一个传入的点取值范围大年夜(0,0)到(1,1),第二个参数代表可以检测哪些对象。可以检测到的对象如下。
-
ARHitTestResultTypeFeaturePoint,根据距离比来的特点点检测出来的持续外面。
-
- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame {...}本文所用的代码在 https://github.com/SquarePants1991/OpenGLESLearn.git的ARKit分支中。
ARHitTestResultTypeExistingPlaneUsingExtent, 已经检测出来的平面,检测时推敲平面本身的大年夜小。
推荐阅读
如何配置并集成iRedMail服务到Samba4 AD DC中
在本教程中,将进修若何修改供给邮件办事的 iRedMail 重要守护过程,响应地,Postfix 用于邮件传输,Dovecot 将邮件传送到帐户邮箱,以便将它们集成到 Samba4 AD 域控制器中。请求在 Cen>>>详细阅读
地址:http://www.17bianji.com/lsqh/36092.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示