AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
1、https://developer.vuforia.com注册账号。
2、分别添加License Manager(连接钥匙),Target Manager(图片后台下载)。
3、下载vuforia-unity-6-2-6.unitypackage (46.20 MB),下载Target Manager里面上传的图片。
4、打开Unity 加载第三部的两个包。
5、如下图unity组件添加

6、钥匙添加后此时这里就可以选择所添加的图片了 如图标注出,下拉选择。背景图片变成选择的图片;然后就可以吧想要展示出来的模型添加成ImageTarget的子物体

7、此时我们就可以实现AR功能。这里我加了两个按钮 实现动画的切换跟返回(附带Button跟模型同时出现隐藏)

8、需要添加的代码如下
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using Vuforia;
using System; public class ChontrolScripts : MonoBehaviour { private Animator ani;
private AnimatorStateInfo current;
private AnimatorStateInfo last; public GameObject canvas;
public DefaultTrackableEventHandler DTEH; // Use this for initialization
void Start () {
ani = GetComponent<Animator>();
current = ani.GetCurrentAnimatorStateInfo();
last = current; DTEH.found += canvansShow;
DTEH.last += cannasHide; } private void cannasHide()
{
if (canvas.activeSelf)
{
canvas.SetActive(false);
}
} private void canvansShow()
{
if (!canvas.activeSelf)
{
canvas.SetActive(true);
}
} // Update is called once per frame
void Update () { if (ani.GetBool("Next"))
{
current = ani.GetCurrentAnimatorStateInfo();
if (current.shortNameHash!=last.shortNameHash)
{
ani.SetBool("Next", false); current = last;
}
}
if (ani.GetBool("Back"))
{
current = ani.GetCurrentAnimatorStateInfo();
if (current.shortNameHash != last.shortNameHash)
{
ani.SetBool("Back", false); current = last;
}
}
} public void OnButtonClickNext()
{ ani.SetBool("Next",true); }
public void OnButtonClickBack()
{
ani.SetBool("Back", true);
} }
/*==============================================================================
Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
All Rights Reserved.
Confidential and Proprietary - Protected under copyright and other laws.
==============================================================================*/ using UnityEngine; namespace Vuforia
{
/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class DefaultTrackableEventHandler : MonoBehaviour,
ITrackableEventHandler
{
#region PRIVATE_MEMBER_VARIABLES private TrackableBehaviour mTrackableBehaviour; #endregion // PRIVATE_MEMBER_VARIABLES public delegate void FoundOrLastEvent();
public FoundOrLastEvent found;
public FoundOrLastEvent last; #region UNTIY_MONOBEHAVIOUR_METHODS void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
} #endregion // UNTIY_MONOBEHAVIOUR_METHODS #region PUBLIC_METHODS /// <summary>
/// Implementation of the ITrackableEventHandler function called when the
/// tracking state changes.
/// </summary>
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
} #endregion // PUBLIC_METHODS #region PRIVATE_METHODS 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;
}
if (found != null)
{
found();
}
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; }
if (last != null)
{
last();
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
} #endregion // PRIVATE_METHODS
}
}
AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)的更多相关文章
- 【经验随笔】Java通过代理访问互联网平台提供的WebService接口的一种方法
背景 通常有两点原因需要通过代理访问互联网平台的提供的WebService接口: 1. 在公司企业内网访问外部互联网平台发布的接口,公司要求通过代理访问外网. 2. 频繁访问平台接口,IP被平台封了, ...
- .NET提供了三种后台输出js的方式:
.NET提供了三种后台输出js的方式: 首先创建 js文件testjs.js { Page.ClientScript.RegisterClientScriptInclude("keys ...
- 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)
说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...
- 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案
文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案 介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...
- 30行代码消费腾讯人工智能开放平台提供的自然语言处理API
腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...
- 如何通过AzureAD平台提供的授权方式访问sharepoint online
官方文档: 1.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645543(v=azure.100)?redirectedfro ...
- 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...
- Hadoop平台提供离线数据和Storm平台提供实时数据流
1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...
- 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
开发微信/易信公共平台时,调试往往很麻烦,一般只能在手机上边试边改, 或在服务器写日志.当你的服务器脚本有Bug时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...
随机推荐
- VI 摘要
1 行首添加注释 1 :5,10s/^/#/g 2 sed '5,10s/^/#/' 2 替换某一个行 文本为 11111 22222 33333 替换: %s/\(.*\)/http:\/\/ ...
- Objective C HMAC-MD5
- (NSString*) HMACWithSecret:(NSString*) secret andString:(NSString *)str { unsigned long encode = C ...
- Ural Vol1(dif>=900)
目前已AC: 2 1040.Airline Company(构造) 题目要求与每个顶点相连的所有边编号最大公约数为1,其实只要其中的两条边编号互质,所有边编号的最大公约数一定为1.我们知道相邻的数字 ...
- ERP软件数据库覆盖数据恢复成功/重装数据库系统软件,导致同名文件覆盖
ERP软件数据库覆盖数据恢复成功/重装数据库系统软件,导致同名文件覆盖 [数据恢复故障描述] 上海某酒店ERP软件原来安装在C盘上,用户误操作把软件进行了卸载,发现软件没有了, 但操作之前没有把原 ...
- 编译Uboot时提示error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
在Ubuntu14.04 64位系统中已经安装了libc6:i386的库,编译Uboot时提示error while loading shared libraries: libz.so.1: cann ...
- windows下Nodejs环境部署
前言 Nodejs是基于v8引擎的轻量级框架,其特点为事件驱动.非阻塞.单线程.异步回调等. Nodejs相对于其他运行在服务器端的语言,容易学习,使用方便. 本文将介绍windows下Nodejs的 ...
- linux设置好IP后,可以访问内网,不能访问外网
1,设置网卡,ip vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为et ...
- 1833: [ZJOI2010]count 数字计数
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2951 Solved: 1307[Submit][ ...
- 职业定位(移动端、ios开发、Android开发)
移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...
- PHP新手之学习数组声明
数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式.这些按序排列的同类数据元素的集合称为数组.下面介绍PHP中的数组声明. 一.数组的概述 1.数组的本质:管理 ...