前言
增强现实技术是当前信息技术领域的一项重要的综合性技术,融合了模式识别、计算机图形学等多个学科的知识。今天我们就和大家一起来看一下,这个技术到底可以带给我们什么吧。
ImageTarget** [图片目标]
1.环境配置
Windows 10(64-bit)操作系统、Unity 3D 5.3.x+(64-bit)、Vuforia 6.0+ SDK
这里需要对开发环境进行简要的说明。
(1)首先Windows系统和Mac OS 都是可以的,我平时用Windows 10,所以就以此为例子来进行讲解。当然Win7、Win8 也都是可以的。目前虽然也有支持Linux的Unity3D 非官方版本,但是将Vuforia导入后运行会报错,目前还没解决。所以推荐使用Windows或者Mac OS。
(2)Unity3D从Unity 5 开始分为了32位版本和64位版本,如果你的计算机是64位系统,可以自由选择,但是注意,Vuforia SDK只有到Vuforia 6才开始支持64位的Unity。这也就意味着,如果你使用VuforiaSDK之前的一些版本,例如Vuforia 4和Vuforia 5,你就只能使用32位的Unity了。
2 下载Vuforia 6
2.1 下载Vuforia 6 SDK [https://developer.vuforia.com/downloads/sdk]
当前SDK最新的版本是Vuforia 6。SDK选项卡下有不同平台的开发包。Samples选项卡下有不同平台的例程,你可以在熟悉使用SDK后自己下载使用,其中就包括平面跟踪和物体跟踪等常见功能。
点击Download for Unity,下载到本地,下载路径最好是纯英文的,否侧导入unity时会报错。如果需要注册账号,就注册一个,并且要记录下来。因为以后管理秘钥和数据库还会用到。
2.2 申请License
点击Develop选项卡下的License Manager选项卡,点击Add License Key。
然后选择相应的信息,如下图,并输入一个App Name。
点击Next,出现确认信息界面,再确认即可。
然后回到License Manager面板,发现已经有了刚刚建立的MyFirstAR(你肯定用的是其他的名字吧,都是可以的)
点开这个刚刚建立的条目,显示如下。
把上面这一大段字符复制到本地保存起来,以备以后使用。
2.3 建立数据库
点击Develop下的Target Manager选项卡,会看到如图所示。
然后点击Add Database,在弹出的对话框中输入名字,并选择Type为Device,然后Create。
然后Target Manager中会显示新添加的数据库,打开它,显示如下。
点击Add Target来添加自己的标志图,作为被跟踪的标志板。
由于我使用的是平面标志板,所以Type中选择Single Image,File选择自己准备好的图像。我是选择了一个龙珠人物的图像。图像要求纹理复杂并且不能是对称的。Width要求输入图像的宽度。我使用的图像打印出来是0.4m,所以为了符合实际尺寸,我就将宽度设置为了0.4。这里需要知道,unity里面默认的单位是米。然后点Add,就成功将图案上传到服务器了。
如上图,我们建立的数据库中已经有了添加的图像,并且评分为5星,表明图像上特征点很多,适合作为标志图案。然后点击Download Database(All),选择开发平台为Unity Editor。
3 建立AR工程
打开之前建立的空工程,导入下载的Vuforia 6 SDK和下载下来的数据库。
依次选择Assets——Import Package——Custom Package,分别导入上述文件(vuforia-unity-6-0-117.unitypackage和MyDataset.unitypackage,也许你用的是其他的名称,只要选对相应文件即可)。
将当前场景保存为AR.unity,然后找到Project下的All Prefabs,点击会在右侧显示下图。
将ARCamera和ImageTarget两个都拖放到Hierarchy中,点击刚拖进来的ImageTarget,在右侧的Inspector中找到C#脚本ImageTargetBehaviour,其下拉选项的Database选择“MyDataset”,ImageTarget就选择你的图片名,其他默认。
然后在Hierarchy中点击ARCamera,在右侧的C#脚本Vuforia Behaviour下拉选项中找到App License Key,将申请的License key复制到方框中。找到Database Load Behaviour脚本,勾选Load MyDataset Database,然后它下面会出现Activate,也勾选上。
现在所有的软件设置已经完成,现在需要在场景中叠加一些虚拟物体。我们先创建一个Cube,并将它作为ImageTarget的子物体,调整位置和大小,如图所示。
保证你的摄像头是正常连接上的。查看的方法是,点击Hierarchy中的ARCamera,然后查看右侧Inspector中的WebCamBehaviour脚本是否检测到了Camera Device。如图,我的摄像头采用的是Logitech HD Pro C920。
一切就绪后,保存场景,并点击运行按钮。可以看到效果如图
3DTarget** [3D目标目标]
1. 插件下载
登陆官网,点击Develop下的Tools,下载Vuforia Object Sanner(Vuforia物体扫描器),Vuforia Object Scanner是一个用于扫描物体表面识别点信息的App,只支持Android操作系统,根据官网规定,建议大家采用Samsung Galaxy S5和Google Nexus 5这两款安卓手机进行操作。
[下载完毕并解压之后会得到以下两部分内容:
文件夹Media:三维物体扫描图,需要采用A4纸打印出来。
scanner.apk:用于三维物体扫描,需要安装上述描述的安卓手机中。
接下来,我们依然按照之前章节中的方法下载Samples插件包并导入到工程中,下图中Object Recognition表示对应的插件包中包含物体识别案例。
2.扫描三维物体识别信息(点云数据)
将上述打印出来的纸张放在桌面上,并在右上角坐标区域放置需要识别的三维物体,并打开已经安装的扫描数据app,360度扫描物体将生成后缀名为.od的数据文件。
3、创建数据库
接下来登陆Vuforia开发者官网创建数据库,本次我们选择3D Object,点击Browse按钮选择上一步骤中生成的数据文件。
4.创建成功之后点击下载数据包,并导入到Unity工程中。
5.实现三维物体扫描
5.1.在Vuforia文件夹中找到ARCamera和ObjectTarget两个预制件并拖拽到层级视图Hierarchy。
5.2.选中ObjectTarget,在Inspector面板中选择三维数据包。
5.3.然后在ObjectTarget下创建一个扫描成功后要显示的子对象,并调节到合适的位置大小,在此我们直接创建Unity子弹的三维模型Sphere。