美文网首页iOS开发iOS
iOS ARKit 使用demo

iOS ARKit 使用demo

作者: DeanNie | 来源:发表于2018-05-17 18:01 被阅读135次

    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

    相关文章

      网友评论

        本文标题:iOS ARKit 使用demo

        本文链接:https://www.haomeiwen.com/subject/urlidftx.html