iOS ARKit 使用demo

1.基本概念
2.创建项目,模拟下载链接(模型),下载存储到沙盒,展示
3.编辑代码, demo下载
4.相关编辑软件
5.第三方平台

  1. dae模型下载平台
  2. dae模型的使用,及可转换为.scn模型

AR

AR支持2D和3D场景, SceneKit支持.dae或obj格式的模型,导入后可以转换成SceneKit对应的scn格式。

AR和SLAM:
AR的框架可以简单划分为感知和交互两部分。

感知部分 : 主要负责信息的收集和处理。信息主要通过不同的传感器收集,包括图像、设备加速度、距离(深度)、语音、手势等。利用这些信息,可以进行运动追踪(定位)、地图构建、语音识别、手势识别等一系列感知行为。这部分主要通过APP或者Default service调用不同的Service模块实现。

交互部分 : 主要负责根据指令触发感知行为或者根据感知结果输出交互行为,比如根据运动追踪得到的姿态渲染虚拟物体,根据场景扫描的结果控制虚拟物体的运动、控制系统界面等等。这部分主要通过APP调用操作系统命令和渲染模块实现。

一个APP可能同时调用多个service模块,一个service模块可能调用多个传感器。理清service模块和传感器之间的最佳组合及最优算法,是AR算法的核心问题。

AR中的SLAM :
如果一个设备想要提供3D效果的AR,显然运动追踪模块是必备的。如果想让虚拟物体和场景交互,或是想要扫描一个真实物体,那么(稠密)三维地图可以提供场景的三维几何信息。
而定位(运动追踪)和建图(稀疏或者稠密地图)构成了SLAM的核心功能。因此,SLAM可以说是AR中最基础的模块,属于设备感知周边环境的范畴。

手势,拖动,单双击等功能
SCNView如何灵活使用DAE文件
功能:
添加双击手势 单击手势 移动手势 双击恢复原状的手势 处理拖拉手势
将.scn文件直接拖入项目,编辑场景(有局限性)
创建AR项目默认会导入一个.scn文件,直接替换即可
模型处理及压缩 ,上传服务器(根据服务下载最新模型)
设置:
手动模拟Xcode对.scnassets文件夹里的.dae文件做一次优化

功能:上传压缩文件zip,通过服务器下载解压,然后显示

下载链接
1 : 上传到公司服务器
2 : 制作公网zip测试下载链接
(1)上传demo中art.scnassets压缩文件art.scnassets.zip到github上
(2)进入页面https://github.com/niexiaobo/ResponsiveWebsite/blob/master/art.scnassets.zip
(3)查看Download按钮对应源码

图片.png

<pre id="line1"><a id="raw-url" class="btn btn-sm BtnGroup-item" href="/niexiaobo/ResponsiveWebsite/raw/master/art.scnassets.zip">Download</a></pre>

其中:https://github.com/niexiaobo/ResponsiveWebsite/raw/master/art.scnassets.zip就是下载链接

创建AR项目

图片.png

修改info

图片.png

Demo下载

主要代码

#import "ViewController.h"
#import "ZipArchive.h"//解压zip
#import "AFNetworking.h"//异步下载
#import "SVProgressHUD.h"//进度和提示框
@interface ViewController () <ARSCNViewDelegate>
//https://github.com/niexiaobo/ResponsiveWebsite/raw/master/art.scnassets.zip
@property (nonatomic, strong) IBOutlet ARSCNView *sceneView;
@property (nonatomic, strong)NSURL *documentsDirectoryURL;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //指定存储路径
    self.documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    
    //需要加载的文件路径(以官方做好的文件测试)
    self.documentsDirectoryURL = [self.documentsDirectoryURL URLByAppendingPathComponent:@"art.scnassets/ship.scn"];
    //判断文件是否已下载
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/art.scnassets/ship.scn"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if(![fileManager fileExistsAtPath:documentsDirectory]) {
        [self downloadZip];//不存在,下载
    } else {
        [self addsceneView];//如果存在,显示
    }
}

//开始下载
- (void)downloadZip {
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    //url链接:zip下载
    NSURL *URL = [NSURL URLWithString:@"https://github.com/niexiaobo/ResponsiveWebsite/raw/master/art.scnassets.zip"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        //显示下载进度
        [SVProgressHUD showProgress:downloadProgress.fractionCompleted];
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        //对文件解压
        NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *inputPath = [documentsDirectory stringByAppendingPathComponent:@"/art.scnassets.zip"];
        
        NSError *zipError = nil;
        
        [SSZipArchive unzipFileAtPath:inputPath toDestination:documentsDirectory overwrite:YES password:nil error:&zipError];
        
        if( zipError ){
            [SVProgressHUD showErrorWithStatus:@"解压失败"];
        }else {
            [SVProgressHUD showSuccessWithStatus:@"解压成功"];
            //开始绘制
            [self addsceneView];
        }
    }];
    
    [downloadTask resume];
}

//开始绘制
- (void)addsceneView {
    self.sceneView.delegate = self;
    self.sceneView.showsStatistics = YES;
    SCNScene *scene1 = [SCNScene sceneWithURL:self.documentsDirectoryURL options:nil error:nil];
    self.sceneView.scene = scene1;
}


手机运行效果:

图片.png

3D软件

下载3D处理软件MAC版: Blender
Blender描述:
一个开源的多平台轻量级全能三维动画制作软件,提供从建模,动画,材质,渲染,到音频处理,视频剪辑的一系列动画短片制作解决方案。blender以python为内建脚本,支持yafaray渲染器,同时还内建游戏引擎。 有了Blender后,喜欢3D绘图的玩家们不用花大钱,也可以制作出自己喜爱的3D模型了

图片.png

下载3D处理软件Cheetah3D for mac
Cheetah3D描述:
Cheetah3D for mac是Mac os平台上的一个很棒的Mac动画制作工具,提供了许多有用的功能强大的多边形建模,编辑在先进的细分和HDRI渲染光能辐射。Cheetah3D倾向、快速和优雅的3D建模、渲染动画,功能非常的强大和实用。

三方平台,其他功能

1 : easyAR SDK功能表

图片.png

图片.png

2 : EasyAR 云识别服务

dae模型下载平台 参考

比如

1: 爱给网

图片.png

下载爱给网 dae 模型,如何在 xcode 中使用

ARKit Demo下载

(1)下载模型

1.解压后,文件夹里file.dae 和尹轻舞.tga 文件, 用ps等转换为png格式


屏幕快照 2018-05-17 下午2.32.01.png

2.同飞机模型一样,建立一个.scnassets文件夹,导入(也可以下载的形式使用)

图片.png
  1. 点击dae文件,弹出更新框,update: 更新模型


    图片.png
  2. 展开菜单,查看文件结构


    图片.png
  3. 设置外衣


    图片.png
  4. 设置外衣 : 添加material


    图片.png
  5. 设置外衣:修改Diffuse选项,选择你的外衣图


    图片.png
  6. 设置外衣: 效果图


    图片.png
  7. 修改代码,设置新文件名称


    图片.png
  8. 运行: 模型太大,看到的是大腿


    图片.png
  9. 菜单可见,模型默认有个节点,把模型拖出来,选择_3dxyz,我删掉它


    图片.png
  10. 右侧栏目位置和尺寸


    图片.png
  11. 设置位置和尺寸初始化(Scale: 该测试模型设置了0.015)


    图片.png
  12. 设置完后,由于缩小后效果,很小,需要切换视角(多次选择相机视角,比如front),让模型自动复位:


    图片.png
  13. 移动到正前方的位置(实线交叉点为相机点, 点击轴长按拖动):

图片.png

16 . 手机运行效果:


图片.png
  1. 另外, 可以把 .dae 模型转 .scn 模型


    图片.png
  2. 选择保留两者


    图片.png
  3. 新生成的文件: filecopy.scn


    图片.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • WWDC 2017全球开发者大会上,苹果公布了其第一款具有AR功能平台的iOS操作系统iOS11。ARKit 是一...
    Spykerking阅读 2,530评论 2 10
  • 岁月永远年轻 我们慢慢老去 请你 请你一定要保持一颗童心 让每一天都过的快乐 ……
    一谙其优阅读 218评论 2 2
  • 去买晚餐的时候,看到第一次穿的红色鞋子还感觉不错的嘛。给人一种积极热情的样子。忽然就想起自己买的很多衣服都不太适合...
    Jimuboy阅读 280评论 0 0
  • 进入医院实习后,主要分为两大部分,医院内与医院外,先说医院外吧! 一 读完一些中医临床书籍,进入医院实习。但因为以...
    玉堂中医阅读 503评论 0 0