《AR与VR开发实战》——3.2 模型脱卡功能的实现

简介:

本节书摘来自华章出版社《AR与VR开发实战》一书中的第3章,第3.2节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 模型脱卡功能的实现

在常见的AR项目中,识别到图像后会将3D物体叠加到识别目标之上并具有追踪效果,但是当识别目标丢失后,我们希望能够将3D模型停留在屏幕中心,并能够和用户进行交互,比如点击模型伴随动画切换、播放语音讲解等一系列功能。这个功能就是我们本节将要为大家介绍的脱卡功能。
脱卡实现的原理是,将3D物体从识别目标下移出,不再将识别图作为3D物体的父对象,这样就能够实现模型不跟随识别物体的效果。接下来我们将模型用一个新建的Camera来渲染,也就是脱离识别图之后的物体是完全在另外一个Camera坐标系下的。
其实,脱卡功能还有更简单的实现方式,比如在ARCamera下创建空物体作为脱离之后模型的目标位置,然后在脱离识别图后将模型移动到空物体下。
在本节中,我们使用另外一种思路来实现脱卡功能。
1.创建工程并设置参数
新建Unity工程,分别导入Vuforia SDK插件包和识别图数据包,然后根据第1章中的设置方法,将需要添加的物体添加到场景,并调整参数以正常识别并显示3D物体。


92bd167bc77ed101d8b8466d6ccf6df5e9eb3d6c

选择ImageTarget,将其自身的DefaultTrackableEventHandler移除,并将该脚本复制一份命名为MyTrackableEventHandler,然后附加到ImageTarget上。然后创建TrackObject.cs和Rotate.cs两个文件。
双击打开Rotate.cs文件,并在该脚本Update()方法中添加一行代码以使物体旋转,代码如下:
//Rotate.cs
//刷新函数,每一帧被调用一次
void Update ()
{

//让物体绕Y轴自转
transform.Rotate(new Vector3(0f,1f,0f));  

}

//TrackObject.cs
//TrackObject类用来查找和确定识别后显示的物体
public class TrackObject : MonoBehaviour
{

//脱卡之后模型的位置
public Vector3 LostPosition;

}
2.脚本修改
修改MyTrackableEventHandler.cs中的OnTrackingFound和OnTrackingLost两个方法。
//识别成功时调用的方法
private void OnTrackingFound()
{

//获取所有TrackObject物体并将它们都销毁
TrackObject[] objects = FindObjectsOfType<TrackObject>();
foreach(TrackObject to in objects)
{
    Destroy(to.gameObject);
}
//卸载无用资源
Resources.UnloadUnusedAssets();
//加载需要显示的模型并实例化到场景中
GameObject obj= GameObject.Instantiate(Resources.Load(objectName))as GameObject;
//将父物体设置为ImageTarget
obj.transform.parent = this.transform;
//设置物体位置
obj.transform.position = this.transform.position;

}

//识别目标丢失时调用
private void OnTrackingLost()
{

//从子物体中获取所有TrackObject组件
TrackObject to = GetComponentInChildren<TrackObject>();

if (to != null)
{
    //将3D物体的父对象从识别目标下移出
        to.transform.parent = this.transform.parent;
    //设置物体的layer值,这里用另一个Camera来渲染脱卡之后的模型
        to.gameObject.layer = 10;
    //将物体的位置设置为TrackObject脚本中设置好的位置
        to.transform.position = to.LostPosition;
}

}
3.场景搭建
选择ImageTarget,在Inspector面板中找到MyTrackableEventHandler脚本,设定以下参数。

然后将Cube拖到与ImageTarget平级的层级,如下图所示。


7ab6c57aa079ef0122234a620cc77ff40a6cc4e4

接下来在Hierarchy面板中右击创建一个新的Camera,选择其Inspector面板Layer标签中的Add Layer命令创建一个新的层。


96e5bc2606d1853e6d0e36def60b14e8e1a10aac

在Layer 10的位置创建一个新的图层OnShow。再调整刚才新建的Camera的Clear Flags属性如下。
选择Depth only,然后在Culling Mask下选择OnShow层,如下图所示。

 


2347a8d624a05af1aa4c029e037398c48b975c11

4.效果实现
在Assets文件夹中新建一个名为Resources的文件夹,将Cube拖到该文件夹中生成prefab预制件,并删除在层级视图Hierarchy中的Cube物体。
选中ARCamera子物体下的Camera对象,在其Inspector面板中找到Culling Mask属性并取消勾选OnShow。


035c1a8b437a419963b8921e5afc0d994839fbad

接下来,点击运行便可测试脱卡效果的实现。

相关文章
|
1月前
|
前端开发 JavaScript API
惊呆了!这些前端技巧竟然能让你的网站支持AR/VR体验!
【10月更文挑战第31天】在数字化时代,用户对网页交互体验的要求日益提高,传统二维网页已难以满足需求。本文介绍如何利用前端技术,特别是Three.js,实现AR/VR体验,提升用户满意度和网站价值。通过示例代码,展示如何创建简单的3D场景,并探讨AR/VR技术的基本原理和常用工具,帮助开发者打造沉浸式体验。
69 6
|
1月前
|
Go vr&ar 图形学
重塑体验:AR/VR技术在游戏与娱乐行业的创新应用
【10月更文挑战第29天】本文探讨了AR/VR技术如何改变游戏与娱乐行业,介绍了AR和VR的基本概念及其在游戏和娱乐中的应用实例,包括《精灵宝可梦GO》的AR开发和VR视频播放器的实现代码,并展望了未来的发展趋势。
126 2
|
3月前
|
5G 测试技术 语音技术
5G赋能沉浸式体验:VR/AR时代的网络基石
5G赋能沉浸式体验:VR/AR时代的网络基石
83 1
|
4月前
|
编解码 vr&ar 芯片
VR与AR:未来的科技趋势
【8月更文挑战第26天】VR与AR技术正以前所未有的速度发展,并在市场规模、技术创新、应用场景以及竞争格局等方面展现出强劲的增长潜力。随着技术的不断进步和应用场景的不断拓展,VR/AR/MR技术将为人们带来更加丰富的虚拟体验和更加便捷的生活方式。未来,我们有理由相信,VR与AR技术将在多个领域实现更广泛的应用和更深入的融合,成为推动社会进步的重要力量。
|
4月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
162 0
|
4月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
86 0
|
5月前
|
传感器 人工智能 数据可视化
虚拟现实(VR)与增强现实(AR)的技术革新:塑造未来的沉浸式体验
【7月更文挑战第24天】VR和AR作为两种前沿的沉浸式技术,正以前所未有的速度改变着我们的世界。随着技术的不断革新和应用的不断拓展,我们有理由相信,未来的VR和AR将为我们带来更多令人惊叹的体验和技术革新。
|
4月前
|
机器学习/深度学习 vr&ar
Sora视频重建与创新路线问题之Perceiver AR模型模态无关的自回归生成如何处理
Sora视频重建与创新路线问题之Perceiver AR模型模态无关的自回归生成如何处理
|
5月前
|
数据采集 监控 安全
园区 AR 导航系统:技术创新与功能拓展
**维小帮园区AR导航系统**借助高精地图与AR技术,打破传统二维导航局限,提供三维立体地图和沉浸式导航体验。系统包括AR实景指引、VR全景预览、便捷预约参观和智能停车场导航等功能,大幅提升访客定位与通行效率,推动园区管理智能化。未来,该技术有望在更多领域广泛应用。
111 0
园区 AR 导航系统:技术创新与功能拓展
|
6月前
|
vr&ar
AR和VR的光学结构分别是什么?
【6月更文挑战第25天】AR和VR的光学结构分别是什么?
204 5