
如不雅你想懂得更多关于OpenGL ES的常识,请移步至 OpenGL ES相干文┞仿目次
iOS11推出了新框架ARKit,经由过程ARKit和SceneKit可以很便利的制造AR App。苹不雅也供给了AR根本的应用框架,你可以直接大年夜此开端你的AR App的开辟。

不过本系列文┞仿将应用OpenGL ES为ARKit供给衬着支撑,接下来我们先去懂得一下ARKit的理论相干常识。
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]; }}应用ARSession的方法很简单,初始化,设置delegate,开启ARSession须要传入一个设备ARWorldTrackingSessionConfiguration,ARWorldTrackingSessionConfiguration代表AR体系会追踪真实世界的特点点,计算摄像机地位。苹不雅今后也有可能会出ARMarkerTrackingSessionConfiguration之类用来辨认追踪标记的设备吧。ARSession开启后会启动相机,并且会经由过程传感器感知手机地位。借用WWDC中的一张图。
ARSession综合相机捕获的视频流和地位信息生成一系列持续的ARFrame。
- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame {...}每个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,根据距离比来的特点点检测出来的持续外面。
-
ARHitTestResultTypeEstimatedHorizontalPlane,非精准方法计算出来竽暌闺重力垂直的平面。
-
ARHitTestResultTypeExistingPlane, 已经检测出来的平面,检测时忽视瞥ゆ本身大年夜小,把它看做一个无穷大年夜的平面。
-
ARHitTestResultTypeExistingPlaneUsingExtent, 已经检测出来的平面,检测时推敲平面本身的大年夜小。
检测成功则返回NSArray *,ARHitTestResult中包含检测类型,订交点的距离,平面的ARAnchor。留意只有检测到ARHitTestResultTypeExistingPlane和ARHitTestResultTypeExistingPlaneUsingExtent才会有ARAnchor。这四个检测类型是可以经由过程|的方法同时存在的,比如ARHitTestResultTypeEstimatedHorizontalPlane | ARHitTestResultTypeExistingPlane。
光线强度调节
ARKit还供给了一个检测光照强度的功能,重要为了让3D模型的光照和情况的光照强度保持一致。在ARFrame中有一个lightEstimate的变量,如不雅检测光照强度成功,则会有值。值的类型为ARLightEstimate,个中只包含一个变量ambientIntensity。在3D光照模型中,它对应情况光,它的值大年夜0 ~ 2000。应用OpenGL衬着时,可以应用这个值调剂光照模型中的情况光强度。
推荐阅读
【51CTO.com快译】 有些开辟团队十分推许主动化测试,弗成否定,主动化测试在回归测试和检查冗余组件方面不掉>>>详细阅读
本文标题:ARKit & OpenGL ES - ARKit 原理及实现
地址:http://www.17bianji.com/lsqh/36017.html
1/2 1

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