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时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...
随机推荐
- 把View转化成Image
+ (UIImage *) imageWithView:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size ...
- cron 编辑器修改
更改 cron 默认编辑工具 Debian 的 crontab 默认的编辑器是 nano,用起来很不习惯,怎么才能转回 VI 呢? 用如下命令即可: #update-alternatives --co ...
- CodeForces 631C Print Check
排序+构造+预处理 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm ...
- 《玩转Bootstrap(JS插件篇)》笔记
导入JavaScript插件 不论是单独导入还一次性导入之前必须先导入jQuery库. 一次性导入 <script src="js/bootstrap.min.js"> ...
- C++中string中的erase函数怎么使用
erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator p ...
- C#数码管控件(转)
源:一个简单Led控件 Led控件,可能是非常经典和常用的了,但是很遗憾的是,这个名称至少涵盖了三种控件:1.是7段式的有发光二极管构成的Led,通常用来显示数字.2.是指示灯,通常用来闪烁,指示电源 ...
- Apache 代理(Proxy) 转发请求
代理分为:正向代理(Foward Proxy)和反向代理(Reverse Proxy) 1.正向代理(Foward Proxy) 正向代理(Foward Proxy)用于代理内部网络对Internet ...
- UVa 11790 - Murcia's Skyline
题目大意:给一个建筑的序列,建筑用高度和宽度描述,找出按高度的LIS和LDS,最长XX子序列的长度按照序列中建筑的宽度和进行计算. 其实就是带权的最长XX子序列问题,原来是按个数计算,每个数权都是1, ...
- 【Xilinx-Petalinux学习】-06-OpenCV通过USB摄像头采集图像。
占位, 实现USB摄像头的图像采集与保存
- github 之 下载历史版本
1.打开github中要下载的项目 2.点击commits 点击上图中标记的地方,进入下图所示: 3. 选择列表中的某个版本 4. Browse Files 5. 下载 点击上图中的 Download ...