Vuforia开发完全指南(四)--- Image Target
Vuforia开发完全指南---Image Target,简单方便的AR图像识别
概述
在Vuforia提供的SDK中,最简单、也是最常见的AR功能就是Image Target---图像识别。你只需提供一张可识别的图片,将图片移到设备的摄像头下,设备上就能出现之前已经集成进去的虚拟场景,而且可以根据ARCamera的不同模式,让图片和虚拟场景的叠加现象有所不同。这篇文章详细讲解了Vuforia中基于Image Target的AR产品开发流程,学完之后你就能开发出一个基于图片的AR App。
演示Demo
这是笔者做的一个简单的冰与火之歌的AR Demo,基于Vuforia Image Target。
点击观看
视频地址:https://v.qq.com/x/page/k0557z1x02n.html
准备工作
工欲善其事,必先利其器。首先我们要做的是准备好工具,这里采用Unity作为开发工具,演示在iOS设备上,因此还需要Mac系统和Xcode。进行开发的第一步就是要下载Vuforia的SDK,登上Vuforia官网进入开发者平台下载Unity的SDK包,完成之后将package导入到Unity中。然后就要登录License Manager和Target Manager创建App的license,以及上传需要扫描的图片。关于License Manager和Target Manager,已经在之前的教程中详细讲过了,可以参考一下。
Vuforia开发完全指南(三)---License Manager和Target Manager详解
首先是在License Manager中创建license key,然后进入Target Manger创建Database,上传需要扫描的图片。这里在点击Add Target之后选择的类型是Device,然后输入相关参数。上传成功后就可以下载图片SDK,导入到Unity中。
功能开发
- 打开Unity工程,在Project面板中找到Vuforia文件夹,将其Prefabs文件夹中的ARCamera拖到Unity场景中,之后删掉场景中之前默认的Camera。
- 将Prefabs文件夹中的ImageTarget拖到场景中,这个是Vuforia用来专门进行图像识别的工具。
- 点击场景中的ARCamera,在其选项面板中点击“Open Vuforia configuration”,将之前创建的license key复制到“App License Key”输入框中。然后在下面的Datasets中,勾选住之前创建的database以及其“Activate”选项,将database激活。
- 点击场景中的ImageTarget,在其选项面板的“Image Target Behaviour”组件中,在Database和Image Target选中对应的名字。
- 将想要展现的3D模型拖入到场景中,并将其作为ImageTarget的子物体。这样,已经完成了最简单的AR图像识别,如果你现在编译工程在设备上运行,将识别图放到摄像头取景范围内,模型就能出来了,并随着识别图的位置改变而改变。但是如果想要加入更多的交互功能,就要用代码来控制。
- 点击场景中的ImageTarget,在其属性面板中可以看到已经挂了一个脚本“Default Trackable Event Handler”,在这个脚本里我们就能对AR场景中的物体进行控制,当图片被成功识别时做什么,当图片消失时又会做什么。
在这个脚本中需要关注两个函数:OnTrackingFound()和OnTrackingLost()函数。其中OnTrackingFound会在图片被识别后调用,OnTrackingLost会在被识别的图片从摄像头取景范围内消失后调用。这两个函数的定义如下:
private void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Enable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = true;
}
// Enable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
}
private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Disable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = false;
}
// Disable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
这两个函数的最后都有一行Debug.Log的打印,里面有mTrackableBehaviour.TrackableName这个变量。这个变量就是之前在Target Manager中上传图片后,导入到图片SDK的图片名字。还记得在上传图片时需要输入的那个名字字符串么?mTrackableBehaviour.TrackableName这个变量就和那个名字字符串是一样的,因此我们可以在代码中利用这个变量来判断是哪张图片被识别,继而控制场景中的物体。
在这个例子中,笔者在场景中加了一个红龙Dragon的模型,还加了一个附带几个按钮的Canvas,用来控制这个红龙的动作。在Default Trackable Event Handler脚本中,将Dragon和Canvas声明为public变量,
public GameObject dragon;
public GameObject canvas;
将场景中的Dragon和Canvas拖入到脚本中的物体框。然后在OnTrackingFound()函数中添加当图像被识
别后,对Dragon和Canvas的控制代码,这里只是简单的让两者出现,注意这里对图片的名字进行了判断,虽说工程中只有这一张图片,但是当需要识别多张图片时,就必须通过ImageTarget中的图像名称来判断识别出的是哪张图片。
if (mTrackableBehaviour.TrackableName == "Dragon")
{
dragon.SetActive(true);
canvas.SetActive(true);
}
同样,在OnTrackingLost()函数中通过对mTrackableBehaviour.TrackableName的判断,来让Dragon和Canvas消失。
if (mTrackableBehaviour.TrackableName == "Dragon")
{
dragon.SetActive(false);
canvas.SetActive(false);
}
Canvas中对Dragon控制的按钮脚本代码就不贴出来了,大家可以通过自己的需求加上很多酷炫和实用的功能。
当代码检查无误后,就能编译工程,拷进设备进行AR体验了。大家可以看到使用Vuforia的Image Target功能,无需很复杂的代码就能做出非常酷炫的AR程序。
Vuforia开发完全指南(四)--- Image Target的更多相关文章
- Vuforia开发完全指南---Vuforia概述
Vuforia概述 AR(Augmented Reality)增强现实,想必大家都已经很熟悉了.这是当下最热的技术之一,是利用计算机视觉和计算机图像学领域的相关知识将虚拟世界融入到现实生活当中.AR和 ...
- Vuforia开发完全指南---License Manager和Target Manager详解
License Manager和Target Manager License Manager 对于每一个用Vuforia开发的AR程序来说,都有一个唯一的license key,在Unity中必须首先 ...
- Vuforia开发完全指南---不懂编程也能做AR程序
不懂编程也能做AR程序 可能一听到要做AR程序,很多人都会想到这是程序员的事.如果不懂编程,不会写代码,是做不了AR程序的.其实,Vuforia的Unity SDK非常人性化,即使你不会编程,也能做出 ...
- 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)
最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...
- C#微信公众号开发系列教程四(接收普通消息)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html
微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...
- Chrome 开发工具指南
Chrome 开发工具指南 谷歌 Chrome 开发工具,是基于谷歌浏览器内含的一套网页制作和调试工具.开发者工具允许网页开发者深入浏览器和网页应用程序的内部.该工具可以有效地追踪布局问题,设置 Ja ...
- OpenGL ES应用开发实践指南:iOS卷
<OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...
- Visual C++2010开发权威指南 中文高清PDF - VC.NET
第一部分 Visual C++ 2010开发与新特性第1章 Visual C++ 2010开发环境简介 11.1 Visual C++ 2010简介 11.2 Visual C++ 2010下 ...
随机推荐
- [2014-11-02]为EF6+Mysql+CodeFirst启用Migration
刚为一个EF6 CodeFirst项目启用了Migration,记几个注意点. 启用方法 在Nuget控制台使用以下命令启用Migration Enable-Migrations #此时生成当前数据库 ...
- unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置
项目进行中,领导要求能够进行一键设置Player settings及自动打包并设置apk的位置,所以自己就上网搜索了很多大神的文章.最后是完成了领导需要的功能,在这里记录并分享一下(此项指针对安卓ap ...
- Python杨辉三角形
RT Show me the Code def triangles(): b = [1] while(True): yield b b = [1] + [b[i] + b[i+1] for i in ...
- 201521123002 《Java程序设计》第1周学习总结
1. 本章学习总结 学习使用Markdown编写文章 jdk的安装和环境变量的设置 java的历史,目前java有三大平台,javaSE,javaEE及javaME.其中javaSE我们会经常用到,由 ...
- 201521123114 《Java程序设计》第10周学习总结
1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 1. 创建线程方式: 定义Thread的子类 定义实现Runnable接口的类,实现run() 2. 调用s ...
- 201521123025《java程序设计》第11周学习总结
1. 本周学习总结 2. 书面作业 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步 ...
- 201521123104 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 1.1 建立数据库,将自己的姓名.学号作为一条记录插入.(截图, ...
- JS中的DOM对象及JS对document对像的操作
DOM对象 windows:属性:opener(打开者) 方法:open().close(),setTimeout().setInterval()... location:属性:href 方法:rel ...
- linux crontab设置定期执行脚本
Linux下crontab命令的用法 任务调度的crond常驻命令crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分锺会定期检查是否 ...
- MySql导入导出数据方法
导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 ...