如何用ARKit把太阳系装在你的iPhone中

来源:互联网 发布:echarts清除缓存数据 编辑:程序博客网 时间:2024/05/20 01:38

转载请注明原作者

第二篇文章链接:如何用ARKit把太阳系装在你的iPhone中(二)

关注AR/VR也有一段时间了,从一开始微软的HoloLens,谷歌眼镜,到苹果上次在WWDC上向开发者们展示他们的AR方面的成果,微软HoloLens高昂的价格让人望而却步,而谷歌眼镜无疾而终,相较于前两者,苹果的AR技术只需要一台iPhone,成本降低了许多,开发者大会上苹果展示的几个Demo效果也着实令我惊艳,于是闲暇时间就在网上找了些资料,写了个小东西。

先上最终效果图:

最终效果图
演示视频:http://www.bilibili.com/video/av12175891

1.开发前准备

手机需要先安装证书文件,不安装无法获取iOS beta版操作系统

证书文件
手机系统iOS 11 beta版

XCode 9 beta版

上述安装包的下载地址:https://developer.apple.com/download/

2.接下来我们进入Code阶段

开发一个AR项目,你需要用到ARKit和SceneKit这两个库,ARKit用来捕捉现实场景参数,SceneKit则用来在AR视图中加载显示3D模型。

AR场景中使用的是3维坐标系如图,你可以通过调节z轴的参数来调节物体距离远近。

AR的三维坐标系

1) 首先我们需要使用初始化ARSCNView,ARSCNView是用来加载AR的3D场景视图

  • (ARSCNView*)arSCNView

{

if(_arSCNView!=nil) {

return_arSCNView;

}

_arSCNView= [[ARSCNViewalloc]initWithFrame:self.view.bounds];

//绑定SCNView的session

_arSCNView.session=self.arSession;

//自适应环境光照度,过渡更平滑

_arSCNView.automaticallyUpdatesLighting=YES;

//初始化节点,

[self initNode];

return_arSCNView;

}
2) ARSession通过管理ARSessionConfiguration实现场景的追踪并且返回一个ARFrame

  • (ARSession*)arSession

{

if(_arSession!=nil)

{

return_arSession;

}

_arSession= [[ARSessionalloc]init];

return_arSession;

}
3) ARSessionConfiguration(会话追踪配置)主要目的就是负责追踪相机在3D世界中的位置以及一些特征场景的捕捉,需要配置一些参数

  • (ARSessionConfiguration*)arSessionConfiguration

{

if(_arSessionConfiguration!=nil) {

return_arSessionConfiguration;

}

//1.创建世界追踪会话配置(使用ARWorldTrackingSessionConfiguration效果更加好),需要A9芯片支持

ARWorldTrackingSessionConfiguration*configuration = [[ARWorldTrackingSessionConfigurationalloc]init];

//2.设置追踪方向(追踪平面,后面会用到)

configuration.planeDetection = ARPlaneDetectionHorizontal;

_arSessionConfiguration= configuration;

//3.自适应灯光(相机从暗到强光快速过渡效果会平缓一些)

_arSessionConfiguration.lightEstimationEnabled=YES;

return_arSessionConfiguration;

}
4) SCNScene是AR场景中的场景,场景中是由许多SCNNode节点组成,SCNNode是一个个3D模型。

例如我们这个例子中需要用到的节点有太阳、地球、月球,可以new三个SCNNode

_sunNode = [SCNNodenew];

_sunNode.geometry= [SCNSpheresphereWithRadius:2.5];
为了使太阳更加逼真,我们需要给sunNode增加纹理

//太阳贴图

_sunNode.geometry.firstMaterial.multiply.contents=@”art.scnassets/earth/sun.jpg”;

_sunNode.geometry.firstMaterial.diffuse.contents=@”art.scnassets/earth/sun.jpg”;

_sunNode.geometry.firstMaterial.multiply.intensity=0.5;

_sunNode.geometry.firstMaterial.lightingModelName=SCNLightingModelConstant;

_sunNode.geometry.firstMaterial.multiply.wrapS=

_sunNode.geometry.firstMaterial.diffuse.wrapS=

_sunNode.geometry.firstMaterial.multiply.wrapT=

_sunNode.geometry.firstMaterial.diffuse.wrapT=SCNWrapModeRepeat;
同时地球,月球都同太阳的创建方法。接下来我们将sunNode节点添加到Scene中

//设置Node的三维坐标

[_sunNode setPosition:SCNVector3Make(0,5, -20)];

//将sunNode节点添加到scene中

[self.arSCNView.scene.rootNodeaddChildNode:_sunNode];
5) 初始化工作做好之后,接下来开启场景捕捉

//开启AR会话,相机开始捕捉

[self.arSessionrunWithConfiguration:self.arSessionConfiguration];
6) 创建工作基本完成,接下来就是如何让这些模型动起来了,动画效果会在下一章讲解。

代码实现:https://github.com/miliPolo/ARSolarPlay


如果您觉得有价值,请在github赏个star,不胜感激。

如果有什么想交流的,欢迎私信。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 屏幕没碎黑屏了怎么办 三星s6屏幕不亮怎么办 苹果手机掉水里屏幕黑屏怎么办 三星s6电池不耐用怎么办 台式电脑显示屏坏了怎么办 三星笔记本电脑不显示韩文怎么办 三星s6开不开机怎么办 电脑显示屏显示检测信号线怎么办 三星s8屏幕坏了怎么办 手机挤压漏液了怎么办 三星显示器跳白色线条怎么办动 三星s6屏幕漏液怎么办 三星电视曲面屏碎了怎么办 平板摔了花屏怎么办 新手机开不了机怎么办 三星a9屏幕漏液怎么办 小米note后面玻璃碎了怎么办 换手机微信钱包怎么办 内外屏一体手机屏幕碎了怎么办 苹果手机显示屏坏了怎么办 华为手机屏裂了怎么办 乐视手机屏坏了怎么办 红米手机触屏失灵怎么办 小米4排线断了怎么办 红米3x屏幕难点怎么办 华为p7屏幕不亮怎么办 红米5外屏碎了怎么办 小米电视碎屏了怎么办 oppo手机第二屏幕打不开怎么办 红米note3屏幕裂了怎么办 小米3屏幕烂了怎么办 苹果x屏幕触屏不灵怎么办 票买好了身份证丢了怎么办 广发信用卡身份证到期了怎么办 人在外地身份证丢了怎么办 人在国外身份证丢了怎么办 身份证丢了户口本不在怎么办 在北京身份证过期了怎么办 没社保卡怎么办厦门健康卡 扬州市民卡丢了怎么办 扬州市民卡坏了怎么办