我要发帖 回复

正式会员

2

主题

61

积分

0

专家分

兴趣点(最多三项):

Unity引擎
VR头盔
VR互动软件

私信
发表时间 : 2017-5-25 17:22:16 | 浏览 : 470    评论 : 0
      http://blog.csdn.net/camellhf/article/details/57422588
摄像头扫描出识别图后能够显示模型
步骤
1.首先要装好Unity 3d。然后访问https://developer.vuforia.com并注册一个账号。
2.登录后点击菜单栏的Develop,然后点击Target Manager。
3.点击Add Database按钮,创建一个数据库,类型保持为默认的Device。
4.创建了数据库后,点击数据库名称,然后点击Add Target按钮,添加图片。
5.此时数据库里就有了一张图片,勾选这个图片,点击Download Database(1),在弹出的页面里选择Unity Editor,然后点击Downloaded按钮进行下载。
6.点击菜单栏Downloads,选择Download for Unity,下载vuforia开发包。
7.新建一个Unity项目,导入我们刚才第5,6步下载的两个包,操作是把包直接拖到Project视图里。
8.把要显示的模型也导入到Unity中,如果是Unity包同样可以直接拖到Project视图。我在蛮牛(http://www.manew.com)里随便下了一个乔巴模型,不是Unity包,但是同样可以拖进去,Unity会生成对应的模型,如果出现问题,可以Google一下解决方式或是直接换一个模型。
9.删掉Hierarchy视图中的Main Camera,并在Project视图中的Vuforia->Prefabs文件下找到ARCamera和ImageTarget预设体,拖动它们到Hierarchy视图中。
10.调整ARCamera和ImageTarget的位置,直到能在Game视图中看到ImageTarget。
第一步先把它们的位置都调整为原点位置
第二步,调整ARCamera的高度和视角
这样就能在Game视图里看到ImgeTarget
11.在Hierarchy视图选中ImageTarget,在Inspector视图中找到Image Target Behaviour脚本,点击Database一栏的empty按钮,选择识别图数据库(由于在第3步我起的名字是AR,所以这里我的选项是AR,你们根据自己的情况选择正确的数据库)。
调整一下ImageTarget的大小,上图显示了是600,所以调成1.5,这时能够在Game视图里看到我们的识别图
12.访问https://developer.vuforia.com,登录后,点击菜单栏的Develop,选择License Manager,点击Add License Key,选择类型是Development,然后填写项目名称,设备选择Mobile就行
完成后如下图
13.点击刚才创建的License名称,复制license信息,在Unity的Hierarchy视图里选中ARCamera,在Inspector视图中找到Vuforia Behaviour脚本,把复制的license信息粘贴到App Lisence key一栏。
14.继续往下,找到Database Load Behaviour脚本,勾选Load AR Database和Activate两个选项。
15.把我们要展示的模型(我这里是乔巴)从Project视图中拖动到ImageTarget之下,成为ImageTarget的子节点。
调整一下模型的位置,大小和方向,直至合适的数值,比如我这里的乔巴调成了这样,要根据自己的模型情况具体调整
16.在其他设备上打开识别图,或是把识别图打印出来,点击运行按钮,把识别图放到摄像头设备前面,调整距离。
必须是有摄像头设备的电脑上运行,不然就会是下图,红色背景表示摄像头设备没有正常运行。
正常应该是这样:
得到上面的结果就完成了第一部分模型的显示,如果出现问题可以在网上搜一下解决方案。
效果

能够对显示的模型进行交互。

步骤

17.在Hierarchy视图中选中ImageTarget,在Inspector视图中找到Default Trackable Event Handler脚本,在名字上右键,选择Edit Script打开了编辑界面。

首先解释一下这个脚本,这个脚本是程序用来检测摄像头视野范围内是否追踪到识别图。


Start函数是Unity的固定函数,只在程序开始时执行一次,所以在这里进行的一般是变量的初始化。
另外还有一个Update函数,也是固定函数,会在每一帧被调用,我们对模型的操作会在Update这个函数里进行。


OnTrackableStateChanged函数是在追踪状态发生改变时执行相应的操作,在追踪到识别图,就会进入if语句,调用OnTrackingFound函数把模型绘制出来。在追踪不到识别图时就会进入else语句,调用OnTrackingLost函数取消模型的显示。

18.开始我们的编程,放心,代码量不大,而且逻辑很容易。首先设置几个变量:

chopper是一个GameObject类型变量,用来表示程序中的一个对象
originScale和newScale都是Vector3类型,有三个分量x,y,z,用来表示三个方向的缩放因子
isTracked是一个bool变量,用来表示识别图是否被追踪到。

19.在Start函数中初始化变量:

GameObject.Find是用来找到我们的目标对象,参数是对象的名字,我们的目标对象就是模型,所以是模型的名字,这个名字可以在Hierarchy中看到

获取模型后,把模型的原始缩放因子存储起来,其中chopper.transform就是指下图这个组件

它包含着position(位置信息),rotation(旋转信息),scale(缩放信息),所以我们通过chopper.transform.localScale得到表示模型缩放因子的3维向量,值是[0.04,0.04, 0.04]。
最后初始追踪状态isTracked设为false表示没有追踪到。

20.更新追踪的状态,直接利用现有的OnTrackableStateChanged函数,在对应情况下设置isTracked的值。

21.最后编写Update函数,根据追踪的状态和鼠标事件更新模型。

在Start函数下面添加一个Update函数。
当追踪到了识别图,利用Input.GetMouseButtonDown函数监听鼠标的点击事件,参数0表示鼠标左键,如果点击了鼠标左键,那么Input.GetMouseButtonDown(0)就会返回true,这时如果新的缩放因子newScale不小于0.01(避免过度缩小),我们减小newScale,然后让模型的缩放因子等于newScale,这就实现了缩小模型。
当追踪不到识别图,要把模型的缩放因子重置为原始的缩放因子,不然下次显示时仍是缩小后的模型。
最终的效果如下:

得到上面的结果就完成了第二部分对模型进行简单操作。以上演示的是PC端的,因为Vuforia是移动端的一个SDK,所以发布成PC端的程序会无法运行。如果是做APP的话,那就得配置好JDK跟Android SDK,交互方式也会不一样,因为移动端没有键盘和鼠标,所以需要其他的交互方式,比如监听触摸事件或是额外添加按钮等UI元素,这些内容可以在网上搜到很多资料,就不详细描述。


最近VR访客

手机版|VR开发网 |网站地图 统计  津ICP备16006248号

GMT+8, 2017-11-25 09:50 AM

返回顶部