现实增强入门

前沿

目前AR技术主流的门派为Metaio、QCAR( vuforia)、D'Fusion 而且都在与Unity 和 Html5 结合。花了两天时间研究了下各个SDK与Unity整合的情况,结论如下: 

1、 Metaio SDK最靠谱,下载安装后就可以直接在unity里跑例子了,丰富的教学资源。免费(限制+水印) 与 付费授权结合  vuforia, 

2、高通的AR解决方案,需要在他的网站上进行Target Manage,也就是图像预处理,这个挺扯的。不过支持立体贴图(铅块,立方体,圆台)。使用的时候需要自己先上传图片,等uvforia的网站处理好了再下回来给应用程序使用。不过识别度不高,我传了10多张都没成功。最新版本的更恶心,需要appkey了,在后面我们会说到  

3、D'Fusion, 也有支持Unity的安装包,但是目前只支持到Unity3.5,现在Unity都4.2了啊,所以DF的例子我没有成功运行起来。

全球范围内还有十分多的AR SDK,如下页面显示了它们之间的区别,十分有用 http://socialcompare.com/en/comparison/augmented-reality-sdks

我主要关注跨平台、云端、自然图像识别这些方面,大家可以根据自己项目有针对性的进行选择。可以看出来Metaio不愧为AR技术的大牛品牌,顺带一提该公司技术支持是涵盖硬件软件的。

下面说下集成

高通的方面在这方面很坑,下载下来的demo是直接不能用的需要更改,改完以后还不行,说是key无效,下面是我的高通的流程,希望能给以你一些帮助

1、下载高通的SDK​  (记得下载IOS版本的SDK)

https://developer.vuforia.com/downloads/sdk

这里有安卓、iOS和u3d的SDK以及例子,SDK和例子可以分开下载,例子分为3种,核心样品、高级主题、最佳实践等

如果你觉得下载慢,也可以在我的github上面进行下载

https://github.com/149393437/Vuforia_AR​

先要解决报错信息#import

这个是因为他的库和例子是分开导致没有加入,所以需要把SDK加入到工程里面,之后依然报错,需要在headerSearchPath里面添加路径,见图

​注意此工程由于是现实增强,需要真机调试才可以,模拟器无法运行的!

程序界面如下图

     

运行后你会发现几乎所有的例子都无法运行,说是key错误,也就是你的数据没有配置

打开代码修改

在SampleApplicationSession类中131行初始化Appkey,原来这里啥也没写

QCAR::setInitParameters(mQCARInitFlags,"33a32261b4dd45e9afa12d2a4723bb46");

33a32261b4dd45e9afa12d2a4723bb46​这段就是要替换为你自己的,什么~你不知道在哪吗?去官网注册一下账号密码,然后点击创建出来

第一步注册与登录​

第二步创建一个标示

 



第三步添加扫描的特征码


接下来有几个步骤了,首先AR,你想看到效果吧,那么我们先在你的工程内找到资源包

打开imageTargets中的选择chips.jpg打开填写图片摘要(选填)填写图片摘要(选填)

​然后运行demo在表格中选择第一个imagetargets,就会出现摄像机镜头,然后对着上面这张图片,你会惊喜的看到一个茶壶在上面,把手移动过去,诶呀,茶壶在上面,图片在下面,在把图片移动一下,诶呀,茶壶也跟着移动,在把手机移动,发现茶壶还是在原地,这就是AR  (如果你是从官网下载的demo,茶壶的颜色应该和我的不一样~~呵呵)

 
 

那么让这个茶壶显示在你的指定的一个图形或者一个物体上呢,而不是默认的这个呢,前面我们说到一个特征码的事情

特征码是需要把文件上传到他的网站上面进行预处理后,给你一个特征码,所以这里比较麻烦​,下图是我已经弄好的特征码​,点击zhangcheng 你需要点击你的

然后点击Download Database 下载这个文件,这个文件夹包含2个文件 一个是dat 另一个是xml  这2个文件是标识了摄像头遇到什么物体,提取特征后进行显示模型的,我们需要的xml里面的一段数据  把这2个文件加入到工程内

打开工程,在imageTargetsViewController中doLoadTrackersData​是加载标识数据的

​把stonesAndChips修改为zhangcheng即可,那么这不算完,在imageTargetsEAGLView中第270行左右的位置 // Choose the texture based on the target name

        int targetIndex = 0; // "stones"

        if (!strcmp(trackable.getName(), "chips"))

            targetIndex = 1;

        elseif (!strcmp(trackable.getName(), "tarmac"))

            targetIndex = 2;

那么其中chips和tarmac是怎么来的,请看下图

 

把​chips和tarmac替换为cc和xx 这样AR里面的3D模型就在你指定的界面上显示了,无图无真相,上图


值得注意的是你在修改完程序以后,建议你先把手机上原本的程序先删除,程序clean后在进行操作,否则有时候会出错,也就是有数据残留

那么好了,我们学会了如何在指定的图片上显示茶壶了,但是茶壶真的不是我们想要的,我们想要的是一个我们需要的模型,那么模型从哪来?

有很多软件都可以做模型,我个人比较喜欢高达系列,所以我使用3DMax做了一个dynames的模型,​​然后点击导出,选择Obj格式的,这样一个模型的顶点坐标、法线、纹理就全都出来了,但是iOS不认识这些,我们需要把他转换为.h文件,.h文件里面写了3个数组,记录相关数字,这个文件非常大,没事不用去看了 

因为高通ARsdk识别的是这类的头文件。头文件中包含了这个模型的坐标数据。提取这些坐标数据通过OpenGL进行渲染就可以绘制出图形。这是后话。现在介绍怎么将obj文件转为头文件。首先从网上下载ActivePerl和obj2opengl.pl。ActivePerl是一个perl的脚本解释器。obj2opengl.pl就是使用perl语言写的一个脚本程序。顾名思义,就可以知道这个脚本程序的作用就是将obj->opengl能够使用的头文件。这两个可以在下面这个链接下载:


http://download.csdn.net/detail/ggtaas/4998573

​http://download.csdn.net/detail/ggtaas/4998714

ActivePerl解压之后直接安装,一般安装在c盘的perl文件夹下,然后将第二个压缩包解压得到的obj2opengl.pl文件拷贝进bin文件夹下。这样这个工具就可以用了。很简单吧。下面将你需要转换的obj文件也拷贝进bin文件夹中,例如是dynames.obj,再运行下面的dos命令就可以了,见下图:​(图后续补充)

然后就有​dynames.h文件   里面有3个C语言的数组和一个int值 在我们后续都会用到,没事就别去砍dynames.h 因为实在是太大了,几万行的数据,所以复制黏贴吧

dynames.h​ 一共是4个参数 其中3个是数组   dynamesVerts     dynamesNormals   dynamesTexCoords  dynamesNumVerts  这些数据主要是在SampleApplication3DModel中进行赋值的 这里我主要加载了2个模型 蝎子和高达的,所以我用宏定义做了一下判断

- (int) numVertices {

   if(XZorDYNAMES){

    returndynamesNumVerts;      

    }else{

        returnxzNumVerts;

    }

}

- (float *)vertices {

    if(XZorDYNAMES){

        returndynamesVerts;

    }else{

        returnxzVerts;

    }

}

- (float *)normals {

    if(XZorDYNAMES){

        returndynamesNormals;

    }else{        returnxzNormals; }

}

- (float *)texCoords {

    if(XZorDYNAMES){

        returndynamesTexCoords;        

    }else{

        returnxzTexCoords;

    }

}

​这样模型就修改好了,但是为什么加载不出来呢?查看代码发现在imageTargetsEAGLView中的renderFrameQCAR方法中offTargetTrackingEnabled是bool值,控制模型无法加载,可以设置为YES即可

什么?还没有?呵呵,那是你没看见,因为模型太小了,在最上面也就是60行左右的位置有个constfloat kObjectScaleOffTargetTracking = 150.0f;这个值是管放大的,所以可以设置为150,这样你就看到了一个黑乎乎的素模高达

那么上颜色怎么办textureFilenames中添加素材

由于vv.png我设置的是一张白色图片,所以你就看到了一个白色的高达了​,关于iOS版本的AR就说到这里我的例子我共享在我的github上了,你可以直接下载,就能使用

https://github.com/149393437/Vuforia_AR

当然扫描时候选择扫描下面这个图

​在最后也给出一些其他的教程资料

官方网站

https://developer.vuforia.com

高通中国​

http://vuforia.arinchina.com/​

u3d高通教程

http://www.unitymanual.com/labe/6821/

u3d教程

http://94it.net/a/jingxuanboke/2014/0719/370004.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值