本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 2598|回复: 0
打印 上一主题 下一主题

利用 Project Tango 将虚拟猫带到您的世界

[复制链接]
跳转到指定楼层
1#
发表于 2016-6-28 16:39:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 truthrudy 于 2016-6-28 16:50 编辑

Project Tango 将增强现实 (AR) 体验带入人们的生活。从现实到异想天开,Project Tango 应用帮助将虚拟物体(从新起居室中的任何家具到全尺寸恐龙)带入您的真实世界。


上个月我们向您介绍了如何快速而轻松地在 AR 中建立一个简单的太阳系。但如果您打算做点什么更高级的,下面的教程介绍了如何使用 Project Tango 的深度 API 将虚拟物体与真实物体关联到一起。本教程还会展示如何使用 Tango 支持库功能在环境中寻找平坦的表面。


那么,我们的新教程项目是什么呢?我们觉得,既然猫统治互联网,我们就在 AR 中放置一只虚拟吧!开发者体验的设计目标是简单易用,当您点按屏幕时,应用会根据真实猫的几何形状数据创建一只虚拟猫。接着,您使用深度相机来定位您点按的表面,将猫注册(放置)到合适的 3D 位置。


让猫登场!

在开始之前,您需要下载 Project Tango Unity SDK。然后,按以下步骤创建您自己的猫。


第 1 步:创建一个新 Unity 项目,将 Tango SDK 程序包导入项目。


第 2 步:创建新场景。如果您不知道如何完成这一步,请回顾太阳系教程。就像太阳系项目那样,在此场景中,您将使用 Tango Manager 和 Tango AR 相机,并删除默认的 Main Camera 游戏对象。完成这一步之后,您应该看到类似下面这样的场景层次结构:



第 3 步:构建并运行一次,确保应用仅显示 Tango 相机输送的视频。


第 4 步:启用 Tango Manager 游戏对象的 Depth 复选框。



第 5 步:将 Tango Point Cloud 预制件从 TangoPrefab 文件夹拖放到场景中。

Tango Point Cloud 包含许多与点云有关的有用函数,包括查找地板、将点云转换成统一的全局空间并渲染调试点。在本例中,您将使用 FindPlane 函数来根据触摸事件查找平面。


第 6 步:在场景中创建一个 UI Controller 游戏对象。为此,请点击 Hierarchy 选项卡下的“Create”按钮,然后点击“Create Empty”。该 UI Controller 将成为负责运行 UIController.cs 脚本(下一步您将创建该脚本)的主游戏对象。


第 7 步:在检查器窗口中,点击“UIController gameobject”,然后点击“Add Component”,以添加一个名为 KittyUIController.cs 的 C# 脚本。KittyUIController.cs 将处理触摸事件,调用 FindPlane 函数,将您的小猫放入场景中。


第 8 步:双击 KittyUIController.cs 文件并使用以下代码替换该脚本

  • using UnityEngine;
  • using System.Collections;
  • public class KittyUIController : MonoBehaviour
  • {
  •     public GameObject m_kitten;
  •     private TangoPointCloud m_pointCloud;
  •     void Start()
  •     {
  •         m_pointCloud = FindObjectOfType();
  •     }
  •     void Update ()
  •     {
  •         if (Input.touchCount == 1)
  •         {
  •             // Trigger place kitten function when single touch ended.
  •             Touch t = Input.GetTouch(0);
  •             if (t.phase == TouchPhase.Ended)
  •             {
  •                 PlaceKitten(t.position);
  •             }
  •         }
  •     }
  •     void PlaceKitten(Vector2 touchPosition)
  •     {
  •         // Find the plane.
  •         Camera cam = Camera.main;
  •         Vector3 planeCenter;
  •         Plane plane;
  •         if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane))
  •         {
  •             Debug.Log("cannot find plane.");
  •             return;
  •         }
  •         // Place kitten on the surface, and make it always face the camera.
  •         if (Vector3.Angle(plane.normal, Vector3.up) < 30.0f)
  •         {
  •             Vector3 up = plane.normal;
  •             Vector3 right = Vector3.Cross(plane.normal, cam.transform.forward).normalized;
  •             Vector3 forward = Vector3.Cross(right, plane.normal).normalized;
  •             Instantiate(m_kitten, planeCenter, Quaternion.LookRotation(forward, up));
  •         }
  •         else
  •         {
  •             Debug.Log("surface is too steep for kitten to stand on.");
  •         }
  •     }
  • }


代码说明
以下是有关上述代码的说明:
  • m_kitten 是对 Kitten 游戏对象的引用(我们将在后续步骤中添加该模型)
  • m_pointCloud 是对 Tango Point Cloud 游戏对象中 TangoPointCloud 脚本的引用。我们需要借助此引用来调用 FindPlane 方法。
  • 我们在 Start() 函数中分配了 m_pointcloud 引用。
  • 在一次触摸结束时,我们会在 Update() 函数中检查触摸的次数及状态。
  • 我们调用 PlaceKitten(Vector2 touchPosition) 函数将猫放入 3D 空间中。这就需要查询主相机(在本例中,是指 AR 相机)的位置,然后根据相机的位置和触摸位置调用 FindPlane 函数。FindPlane 从触摸点返回一个估算的平面,并将猫放到某个不是过于陡峭的平面上。提醒一下,Tango 支持库中提供了 FindPlane 函数。您可以访问TangoSDK/TangoSupport/Scripts/TangoSupport.cs,查看其全部功能。

第 9 步:通过下载 kitty.unitypackage 准备好一切资源,其中包括一个猫模型以及一些简单的动画。双击该程序包,将其导入到您的项目中。在项目文件夹中,有一个 Kitty 预制件,您可以将其拖放到 KittyUIController 的 Kitten 字段中。


第 10 步:编译并再次运行应用。您应当能够点按屏幕并将小猫放在任何地方!我们希望您喜欢本教程,让猫的可爱和 AR 的魔力浑然一体。请继续关注本博客,了解更多 AR 动态和教程!



有关本教程的最后说明
现在,您已经创造了在 AR 中生活的虚拟猫。这很好,但从编码的角度来看,您还需要再执行几步操作,以打造真正栩栩如生的 AR 应用。查看我们在 Github 上的 Unity 示例代码(尤其是 Augmented Reality 示例),以详细了解如何构建优秀的 AR 应用。此外,如果您需要进修,请查阅 I/O 大会上关于使用 Project Tango 构建 6DOF 游戏的谈话

ChinaGDG.com
回复

使用道具 举报

2#
发表于 2016-7-1 16:25:45 | 只看该作者
kitty.unitypackage的下载链接得更新一下:“https://developers.google.com/tango/downloads/kitty.unitypackage
ChinaGDG.com
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表