前期配置

unity2017

软件实现功能准备

数据库的准备

登录到vuforia的官网并且sign in

点击 Get Basic创建一个Liscense Key.

进入已经创建的Liscense Manager,将 License Key复制下来,后面会用到。

在Liscense Key的上面点击Target Manager创建需要识别的图片的数据库。

数据库名字不能为中文,数据库的作用是存放需要识别的图片,类型选择Device

创建完如下图,双击进入数据库

**点击Add Target添加图片,名称不能是中文,Type选择“Device”

将图片添加完以后,点击 “Downlode Database(All)”下载该数据库。数据库的下载格式为unity

进入unity建一个新的项目


进入项目,然后在Hierachy面板中建一个ARCamera


点击file然后点击build setting,进入build setting面板。

选择android端,点击“Player Setting”,在“Inspector”面板中设置Company Name和Product Name并且勾选“XR Settings”中的“Vuforia Augmented Realit”。

点击“AR Cramera”的“inspector”面板,点击面板内 “Vuforia Behaviour(Script)” 组件中的“Open Vuforia configuration”。

在Vuforia configuration面板中Database 的App License Key粘贴第二步的内容,选择自己导入数据库并勾选Activate。

自己导入:点击add database,然后跳转到数据库,下载以unity格式数据库,下载完毕后打开就导入进去了

在Hierachy面板中右键点击Vuforia 然后点击 Image创建一个ImageTarget。

查看ImageTarget的inspector面板,在该面板中的“Image Target Behaviour(Script)”组件中“Database”选择之前创建的数据库,“Image Target”选择数据库中相应的图片。

将3D模型导入Unity,在Hierachy面板中将该模型拖到对应的ImageTarget中


要让图片的正上方出现模型,把他们的xyz坐标调整一样即可

建立代码脚本

将缩放和旋转和平移脚本拖到Hierachy面板中所创建的ImageTarget的模型里就能实现旋转和缩放和平移的效果了

在Hierachy面板中建一个新的空物体,命名为Manager

将脚本Manager拉到空物体Manager中

在之前创建的Image中添加脚本MyTrackable,并取消里面的第一个脚本的勾选。这样就完成了脱卡效果的添加

Unity导出安卓apk

点击file然后点击build setting,选择安卓端平台,点击“Player Settings”
在Inspector面板中,勾选XR settting中的Vurforia Augmnted Reality

点击“Other Settings”,修改Package Name,将之前设置的Company Name、Product Name填入其中。注意下面的TV不勾选

在Build Settings中点击的Build就可以导出安卓apk,然后将apk文件发送到手机下载安装即完成。

源码

控制代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Manager : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framepublic List<Transform>allTargetImages=new List<Transform>();public void HideAllModels(){foreach (Transform item in allTargetImages) {item.GetComponent <MyTrackable>().HideCurrentModel ();}}}

托卡代码

/*==============================================================================
Copyright (c) 2017 PTC Inc. All Rights Reserved.Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
All Rights Reserved.
Confidential and Proprietary - Protected under copyright and other laws.
==============================================================================*/using UnityEngine;
using Vuforia;/// <summary>
///     A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class MyTrackable : MonoBehaviour, ITrackableEventHandler
{#region PRIVATE_MEMBER_VARIABLESprivate Transform aRCamera;private  bool isFirstFound = false;private Manager manager;protected TrackableBehaviour mTrackableBehaviour;#endregion // PRIVATE_MEMBER_VARIABLES#region UNTIY_MONOBEHAVIOUR_METHODSprotected virtual void Start(){aRCamera = GameObject.Find ("ARCamera").transform;HideCurrentModel ();manager = GameObject.Find ("Manager").GetComponent <Manager>(); manager.allTargetImages.Add (this.transform );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){Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");OnTrackingFound();}else if (previousStatus == TrackableBehaviour.Status.TRACKED &&newStatus == TrackableBehaviour.Status.NOT_FOUND){Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");OnTrackingLost();}else{// For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND// Vuforia is starting, but tracking has not been lost or found yet// Call OnTrackingLost() to hide the augmentationsOnTrackingLost();}}#endregion // PUBLIC_METHODS#region PRIVATE_METHODSprotected virtual void OnTrackingFound(){isFirstFound = true;manager.HideAllModels ();ShowCurrentModel ();}protected virtual void OnTrackingLost(){if (isFirstFound) {aRCamera.position = new Vector3 (-0.000f,- 0.500f, -5.000f);aRCamera.localRotation = Quaternion.identity;}}private void ShowCurrentModel(){foreach (Transform item in this.transform) {item.gameObject.SetActive (true);}}public  void  HideCurrentModel(){foreach (Transform  item in this.transform) {item.gameObject.SetActive (false );}}#endregion // PRIVATE_METHODS
}

旋转代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Xuanzhuan : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update(){if(Input.touchCount==1){     //当触控状态为单机时if(Input.GetTouch(0).phase==TouchPhase.Moved)//当触控状态为移动时{   Vector2 deltaPos = Input.GetTouch(0).deltaPosition;float x = deltaPos.x;float y = deltaPos.y;//获取xy轴的偏移量float speed = 0.5f;transform.Rotate(Vector3.up *-x*speed,Space.World);transform.Rotate(Vector3.right*y*speed,Space.World);//旋转的方向、距离和速度}}}}

缩放代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Suofang : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if(Input.touchCount==2){Touch touch1_Current = Input.GetTouch(0);//获取现在第一个触控点Touch touch2_Current= Input.GetTouch(1);Vector2 touch1_Previous_Pos = touch1_Current.position- touch1_Current.deltaPosition;Vector2 touch2_Previous_Pos = touch2_Current.position- touch2_Current.deltaPosition;float dis_Current = Vector2.Distance(touch2_Current.position, touch1_Current.position);float dis_Previous = Vector2.Distance(touch2_Previous_Pos, touch1_Previous_Pos);float offset = dis_Current - dis_Previous;float scaleFactor = offset*0.01f;Vector3 localScale = transform.localScale;Vector3 scale = new Vector3 (localScale.x +scaleFactor, localScale.y +scaleFactor, localScale.z +scaleFactor);if(scale.x>=0.05f&& scale.x<=6.0f&& scale.y>=0.05f&& scale.y<=6.0f&& scale.z>=0.05f&& scale.z<=6.0f){  transform.localScale = scale;}}}
}

平移代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Pingyi : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update(){if(Input.touchCount==1){     //当触控状态为单机时if(Input.GetTouch(0).phase==TouchPhase.Moved)//当触控状态为移动时{Vector2 deltaPos = Input.GetTouch(0).deltaPosition;//获取手指移动的距离float x = deltaPos.x;float y = deltaPos.y;//获取xy轴的偏移量float speed = 0.005f;transform.Translate(Vector3.right*x*speed,Space.World);transform.Translate(Vector3.right*y*speed,Space.World);//平移的方向、距离和速度}}}}

实现扫描图片出现3d模型的虚拟仿真技术相关推荐

  1. 计算机网络搭建软件,计算机网络搭建中的虚拟仿真技术

    计算机网络搭建中的虚拟仿真技术 来源:用户上传 作者:胥果 [摘           要]  现代计算机技术.通信技术的快速发展将二者成功地连接在一起,形成计算机网络,广泛地应用于当前的生活和工作中. ...

  2. 3d量测怎么学距离_3D虚拟仿真技术提升物流设备应用能力

    老师,疫情过后,新的一学期即将开启.为了暂时减少学生与外界的接触,确保学生的健康安全,在尽量不去企业现场参观物流设备的前提下,您准备怎样开展物流设备认知?怎样才能让学生近距离学习到物流设备的知识? 物 ...

  3. 计算机模拟及其应用,浅析计算机虚拟仿真技术及其应用

    摘要:虚拟仿真技术又叫视景仿真或者虚拟现实技术(Virtual Reality,VR),是指运用计算机技术为核心,采用现代高科学技术制作出栩栩如生的触觉.听觉.视觉一体化的虚拟环境,用户借助相应的工具 ...

  4. 计算机网络通信的仿真,计算机网络虚拟仿真技术研究与应用.doc

    计算机网络虚拟仿真技术研究与应用 计算机网络虚拟仿真技术研究与应用 摘 要: 虚拟仿真技术也日趋成熟,已经应用到了科学.生活等各个领域,许多高校也开始将虚拟仿真技术应用到实际教学中.传统的实验教学受到 ...

  5. 元宇宙:虚拟仿真技术的全面提升

    在当今数字化的世界中,我们经常听到虚拟现实.增强现实.混合现实等技术的名词,这些技术的应用越来越成熟.其中,虚拟仿真技术是一种通过计算机技术来模拟实际场景和对象的过程,它为我们提供了更多的可能性.而最 ...

  6. 计算机与信息安全+虚拟仿真Vr,VR虚拟仿真技术给高校实验教学安全多一道防线...

    原标题:VR虚拟仿真技术给高校实验教学安全多一道防线 实验室教学安全管控内容侧重于对实验室安全的认知.如何做好实验室安全工作.适用于认识实验(实训)室安全的重要性,提高实验室安全意识,防范潜在危险等安 ...

  7. 【虚拟仿真技术】给医疗行业带来新突破

    随着信息技术的发展,虚拟仿真技术已经从一种新兴科技发展成我们生活.生产中随处可见的应用技术,虚拟仿真已经大规模应用到娱乐.工业.医疗等各个领域,对这些行业进行着一场前所未有的革命. 虚拟仿真是什么 虚 ...

  8. 计算机网络局域网仿真搭建,基于虚拟仿真技术的计算机网络实验室的构建.pdf...

    基于虚拟仿真技术的计算机网络实验室的构建.pdf 第29卷第1期 湖北汽车工业学院学报 Vol.29 No.1 2015 年3月 JournalofHubeiUniversityofAutomotiv ...

  9. 计算机虚拟仿真专业,虚拟仿真技术在计算机专业网络基础课程教学中的应用

    虚拟仿真技术在计算机专业网络基础课程教学中的应用 [摘要]本文以新疆石河子职业技术学院计算机专业网络基础课程的教学改革为切入点,以怎样改革现有的网络基础课程教学.以提升学生的学习与应用能力为根本目标, ...

最新文章

  1. python 第三方库 工具
  2. 全球及中国水彩调色板行业销售前景与投资商机研究报告2022版
  3. Study 4 —— 数据类型(1)
  4. why we need createBindingContext in SAP UI5
  5. C和指针之字符串总结
  6. android 音频播放总结 soundlPool,MediaPlay
  7. html5 sqlite存储图片,HTML5之Sqlite
  8. 第二期临床基因组家系数据分析实战,快速发表SCI文章
  9. 您是如何开始使用Linux的?
  10. 情侣签到365天获1000现金?这款App被关停下架了 网友拍手称快!
  11. KNN(六)--LSH算法
  12. 米洛个人修炼术:注意这三方面,天天都早起
  13. CMMI3认证升级CMMI5认证需满足的基本条件
  14. ws2812 c语言程序,STC15单片机驱动WS2812B七彩LED(汇编混合编程)
  15. 屏幕尺寸、屏幕分辨率、高清屏、屏幕像素密度
  16. 用Python+小程序实现诗词大会的飞花令
  17. 超纯水制备树脂MB-115、MB-106UP产水18.25兆欧
  18. win10文件同步到服务器失败,手把手为你解决win10系统同步时间同步失败的思路...
  19. Linux内核源码组织结构
  20. AAAI 2021论文接收列表内有关因果的文章

热门文章

  1. C++ 拓扑排序(AOV网络)
  2. 基于多源大数据的武汉市区域空间格局研究
  3. 量化交易之指数增强策略
  4. elevation格式_Google Elevation的工作方式以及如何创建简单的C#应用​​程序?
  5. RNN实现股票预测(别当真)
  6. BFC到底是什么?如何理解
  7. 【优化布局】matlab基于禁忌搜索算法求解基站选址问题代码
  8. MYSQL报1265和1366错误
  9. Package name does not correspond to the file path (IntelliJ IDEA)
  10. ApiView 的使用