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

Download

其中: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 () 
//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

你可能感兴趣的:(iOS ARKit 使用demo)