using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;   //因为屏幕自适度原因,使用了Canvas的Canvas Scaler组件(Canvas来自Unity的UI)public class Area : MonoBehaviour {public Material Red_Mate;public Material Green_Mate;public Material Tran_Mate;private CanvasScaler Cans;  //申请变量储存UI屏幕自适度(长&宽)的缩放组件private float X_Sc;   //申请浮点型变量储存实际的缩放比例(实际的/Unity使用的)//记录扫描框坐标  二维!private Vector2 TopLeft_UI, BottomLeft_UI, TopRight_UI, BottomRight_UI;   //我们可以看到Vector2是淡蓝色,代表一个类,所以需要实例化。//记录面片的世界坐标  三维!private Vector3 TopLeft_pl_w, BottomLeft_pl_w, TopRight_pl_w, BottomRight_pl_w;//获取面片二维方向上高和宽的长度!private Vector2 PlaneWH;//记录面片的屏幕坐标Vector2 TopLeft_pl_sc, BottomLeft_pl_sc, TopRight_pl_sc, BottomRight_pl_sc;// Use this for initializationvoid Start () {Cans = GameObject.Find("Canvas").gameObject.GetComponent<CanvasScaler>();  //获取屏幕自适度,GameObject指GameObject.Find("Canvas")这个物体,gameObject指GameObject这个物体。待测试去掉gameOgject是否可运行。X_Sc = Screen.width / Cans.referenceResolution.x;//为什么是除以x呢?因为在unity中,UI Scale Mode选的是Scale with Screen Scale,根据屏幕比例自动缩放,并且下方的//Screen Match Mode——Match Width or Height滑动条中,我们将滑动条拖到了最左侧的Width,所以是用屏幕宽度/自定义的宽度。}// Update is called once per framevoid Update () {//计算扫描框四个点位置TopLeft_UI = new Vector2(Screen.width - 400*X_Sc, Screen.height + 300 * X_Sc) * 0.5f;  //因为不确定屏幕分辨率大小,所以需先获取;记得f!BottomLeft_UI = new Vector2(Screen.width - 400 * X_Sc, Screen.height - 300 * X_Sc) * 0.5f;  //屏幕左下角(0,0),向右x轴,向上y轴TopRight_UI = new Vector2(Screen.width + 400 * X_Sc, Screen.height + 300 * X_Sc) * 0.5f;BottomRight_UI = new Vector2(Screen.width + 400 * X_Sc, Screen.height - 300 * X_Sc) * 0.5f;//我们需要的是面片在空间中的大小,但我们获取到的是面片的实际大小,它本身缩放了0.1倍,它父集缩放50倍,所以他在空间实际是扩大了5倍,所以要*5。PlaneWH = new Vector2(gameObject.GetComponent<MeshFilter>().mesh.bounds.size.x, gameObject.GetComponent<MeshFilter>().mesh.bounds.size.z)*5*0.5f;   //空间中x、z是长宽,y是空间中的高度!//获得图片的四个点世界坐标(gameobject指的是面片,它的父集是图片)(position是图片中心的位置,所以需要加上面片x,y向长度)TopLeft_pl_w = gameObject.transform.parent.position + new Vector3(-PlaneWH.x, 0, PlaneWH.y);BottomLeft_pl_w = gameObject.transform.parent.position + new Vector3(-PlaneWH.x, 0, -PlaneWH.y);TopRight_pl_w = gameObject.transform.parent.position + new Vector3(PlaneWH.x, 0, PlaneWH.y);BottomRight_pl_w = gameObject.transform.parent.position + new Vector3(PlaneWH.x, 0, -PlaneWH.y);//获取面片的屏幕坐标TopLeft_pl_sc = Camera.main.WorldToScreenPoint(TopLeft_pl_w);   //Camera.main.WorldToScreenPoint()是封装好的函数,将三维向量转化为屏幕的二维向量。BottomLeft_pl_sc = Camera.main.WorldToScreenPoint(BottomLeft_pl_w);TopRight_pl_sc = Camera.main.WorldToScreenPoint(TopRight_pl_w);BottomRight_pl_sc = Camera.main.WorldToScreenPoint(BottomRight_pl_w);if (TopLeft_pl_sc.x>TopLeft_UI.x && TopLeft_pl_sc.y < TopLeft_UI.y && BottomLeft_pl_sc.x > BottomLeft_UI.x && BottomLeft_pl_sc.y > BottomLeft_UI.y&&TopRight_pl_sc.x<TopRight_UI.x&&TopRight_pl_sc.y<TopRight_UI.y&&BottomRight_pl_sc.x<BottomRight_UI.x&&BottomRight_pl_sc.y>BottomRight_UI.y){gameObject.GetComponent<Renderer>().material = Green_Mate;   //当面片完全处于扫描框中时执行代码赋予材质}else{gameObject.GetComponent<Renderer>().material = Red_Mate;}}
}

测试过程发现几个待改进地点:
1、
未考虑手机屏幕可旋转问题,导致旋转后手机UV的二维向量就互换了,即X、y变成了y、x(或其他方式),此时不该除以x(宽)
2、若识别图转动了一定角度(90°、180°、270°),即识别图不和屏幕同一方向了(面片和识别图同方向,面片四个点的
数值根据识别图位置确定,我们获取的是面片数值,转换后与屏幕数值相比较,很明显转动角度后比较的数值是错的),会出现不正确显示问题

大家还有什么问题,欢迎在下方留言!

如果你有 技术的问题 或 项目开发

都可以加下方联系方式

和我聊一聊你的故事

AR涂涂乐⭐三、 C#实现识别图进入扫描框显示绿色,未进入为红色功能相关推荐

  1. win7显示未识别的网络_win7系统显示:未成功关闭,进入安全模式也不行

    提示"windows未能成功关闭" 系统关机程序损坏,启动文件损坏,只能使用U盘启动工具,进入pe系统修复 win修复工具,总是这样直接重新安装系统就更好. 电脑直接拔电源,就是强 ...

  2. Unity+Vuforia开发增强现实(AR)教程——识别图的那些坑

    正文前的叨叨叨: 博主现在不做技术了,很久没更新了博客,但是一直有溜回来看看主页什么的. 很多朋友给我留言私信求教,我只想说,你们提的这些都不是大问题的,你们完全可以自己解决的啊,不要做伸手党,而且V ...

  3. 开发增强现实(AR)教程——识别图的那些坑

    第一期:Vuforia识别图的那些坑 一.Vuforia的图片识别机制 大学时学习的是计算机科学的数字媒体方向,图像处理粗略接触过,对于Vuforia的图片识别机制,只能大概讲一下步骤和猜想,无法给出 ...

  4. 车架号图像识别,车架号拍照识别,车架号扫描识别,车架号OCR识别

        车架号识别         车架号识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车架号识别提取.图像预处理.特征提取.车牌字符识别等技术,识别车辆VIN码(车架号)信息. ...

  5. AR涂涂乐⭐一、unity高版本ImageTarget识别图开始是空白的解决办法、UI自适度

    ImageTarget识别图不显示解决办法: 1,找到在unity的识别图的源文件,目录地址是:Assets---->Editor------>vuforia----->ImageT ...

  6. 手把手教你做个AR涂涂乐

    前段时间公司有一个AR涂涂乐的项目,虽然之前接触过AR也写过小Demo,但是没有完整开发过AR项目.不过经过1个多星期的学习,现在已经把项目相关的技术都学会了,在此向互联网上那些乐于分享的程序员前辈们 ...

  7. ​手把手教你做个AR涂涂乐 ​

    前段时间公司有一个AR涂涂乐的项目,虽然之前接触过AR也写过小Demo,但是没有完整开发过AR项目.不过经过1个多星期的学习,现在已经把项目相关的技术都学会了,在此向互联网上那些乐于分享的程序员前辈们 ...

  8. EasyAR_实现AR涂涂乐

    实现AR涂涂乐 需要建模的时候 展UV 识别图 和 模型需要匹配好 官方案例 在 Assets --> Samples --> Resources --> HelloAR_Color ...

  9. unity3D AR涂涂乐制作浅谈

    unity3D AR涂涂乐制作浅谈 AR为现在是虚拟现实较为火爆的一个技术,其中有个比较炫酷的就是AR涂涂乐的玩法,这个技术可以把扫描到的图片上的纹理 粘贴到模型上实现为模型上色的功能,但是我们需要怎 ...

  10. 涂涂乐的详细实现之四--unity3d调用EmguCV实现图片识别

    涂涂乐严格来说有两个版本,一种是前面详细介绍过的,鼠标控制画图截图发送给服务端实现模型上色:另一种是通过实物图彩笔绘图之后通过扫描仪生成图片发送给服务端来实现模型上色. 动物模型有多种,贴图有多种,在 ...

最新文章

  1. LRU算法 -- 链表 完整实现
  2. T-SQL Enhancement in SQL Server 2005[上篇]
  3. php分层怎么实现,mvc-PHP如何做到分层开发?
  4. oracle基本概念和术语
  5. Asp.net MVC Filter监控页面性能和运行时间
  6. [机器学习] XGBoost on Spark 分布式使用完全手册
  7. 【bzoj3555】[Ctsc2014]企鹅QQ 简单哈希
  8. int a[5]={}, a+1与(int*)a+1的区别
  9. 如何写robots.txt?
  10. python入门经典100例-【python】编程语言入门经典100例--37
  11. 什么是SOHO一族?
  12. xsd是什么文件,作用是什么?
  13. 学会PDF转Word,PDF编辑不再是问题!
  14. 东芝打印机共享怎么设置_东芝 e-studio181怎么设置网络打印机
  15. python jpg压缩,Python 实现图片大小压缩
  16. SpringBoot中使用Aspect实现切面,超详细
  17. Android app 启动优化
  18. 配置NSG限制VM访问Internet
  19. Qsetting本地缓存PC端数据
  20. 关于特许权使用费的法律规定

热门文章

  1. keyshot渲染玻璃打光_keyshot打光技巧,教你如何制作汽车自由式布光效果
  2. 爬取智联招聘岗位描述并根据描述生成词云
  3. 2021年总结:回顾这不平凡的一年
  4. 数字英文唯一_福特高光归来!双喷+同级唯一8AT,福克斯“猎装”大杀四方
  5. 当系统中存在多个浏览器,如何设置IE为自己的默认浏览器
  6. 再观《一步之遥》观后感
  7. 一图看懂互联网各职位都是干啥的
  8. 【ELT.ZIP】OpenHarmony啃论文俱乐部——计算机视觉数据压缩应用
  9. 富途牛牛2021校招,超多岗位等你来
  10. 《一只特例独行的猪》摘抄