在一些卡牌(卡片)游戏应用上,如果不能很好的对焦就会导致用户体验不佳,假若让系统相机去自动对焦这样出来的效果就会好很多,好的下面来说说——

说之前,先科普一下,不喜略过直接往下看哈~

对焦也叫对光、聚焦。通过照相机对焦机构变动物距和相距的位置,使被拍物成像清晰的过程就是对焦。而对焦的方式有以下几种:自动对焦、手动对焦、多重对焦以及全息自动对焦、我们这里讲的就是自动对焦,传统相机上的傻瓜式对焦方法。以下是相关的代码实现:

基于触摸屏,一种是直接将脚本文件挂载到ARCamera,一种是用NGUI、将其放到新建的GameManger底下,不过两种思路都是相同的,自动对焦的代码要写在start()方法里面,如图:(切记:using Vuforia;这个需要在一开始新建的脚本中引入)

              

接下来分析代码:

//自动对焦变量private string label;private float touchduration;private Touch touch;

Start()方法,初始化并进行自动对焦调用

void Start () {if (Input.touchCount > 0){touchduration += Time.deltaTime;touch = Input.GetTouch(0);if (touch.phase == TouchPhase.Ended && touchduration < 0.2f){StartCoroutine("SingleOrDouble");}}else{touchduration = 0;}}
IEnumerator SingleOrDouble(){yield return new WaitForSeconds(0.3f);if (touch.tapCount == 1){Debug.Log("Single");OnSingleTapped();}else if (touch.tapCount == 2){StopCoroutine("SingleOrDouble");//否则会触发两次Double TouchDebug.Log("Double");OnDoubleTapped();}}private void OnSingleTapped(){TriggerAutoFocus();label = "Tap the Screen!";}private void OnDoubleTapped(){label = "Double Tap the Screen!";}

触发自动对焦方法:

public void TriggerAutoFocus(){StartCoroutine(TriggerAutoFocusAndEnableContinuousFocusIfSet());}private IEnumerator TriggerAutoFocusAndEnableContinuousFocusIfSet(){CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO);yield return new WaitForSeconds(1.0f);CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);}void OnGUI(){GUI.Label(new Rect(10, 0, 100, 100), "-&-C*-Z*-D*-&->" + label);}

最后在update()方法写上:

void Update () {if (Input.GetKey(KeyCode.Escape)){Application.Quit();}
}

有的童鞋,也将自动对焦的代码写在update()方法里面,即是start()方法空着,由于我这边的功能实现上还有别的,所以我做了这样的处理,希望大家多多交流哈,不吝赐教。

using UnityEngine;
using System.Collections;
using Vuforia;public class AutoFocusControl : MonoBehaviour {private string label;private float touchduration;private Touch touch;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (Input.GetKey(KeyCode.Escape)){Application.Quit();}if (Input.touchCount > 0){touchduration += Time.deltaTime;touch = Input.GetTouch(0);if(touch.phase == TouchPhase.Ended && touchduration < 0.2f){StartCoroutine("SingleOrDouble");}}else{touchduration = 0;}}IEnumerator SingleOrDouble(){yield return new WaitForSeconds(0.3f);if (touch.tapCount == 1){Debug.Log("Single");OnSingleTapped();}else if (touch.tapCount == 2){StopCoroutine("SingleOrDouble");Debug.Log("Double");OnDoubleTapped();}}private void OnSingleTapped(){TriggerAutoFocus();label = "Tap the Screen!";}private void OnDoubleTapped(){label = "Double Tap the Screen!";}public void TriggerAutoFocus(){StartCoroutine(TriggerAutoFocusAndEnableContinuousFocusIfSet());}private IEnumerator TriggerAutoFocusAndEnableContinuousFocusIfSet(){CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO);yield return new WaitForSeconds(1.0f);CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);}void OnGUI(){GUI.Label(new Rect(10, 0, 100, 100), "---->" + label);}
}

最后的最后,说说一些综合的东西。

1.测试在手机上面实测,效果比较明显

2.关于vuforia sdk 3.x和4.x的代码异同,当然现在已经去到5.x版本了,不过拾人牙慧,以下上代码:

3.x版本的:

void Start () {CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);}

4.x版本的:

 void Start () {Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);}

附录:相关文章  AR自动对焦

Vuforia应用之相机自动对焦功能相关推荐

  1. HarmonyOS之深入解析相机的功能和使用

    一.简介 ① 概念 HarmonyOS 相机模块支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问.操作和新功能开发,最常见的操作如:预览.拍照.连拍和录像等. 相机静态能力:用于描述相 ...

  2. 使用S60手机的相机对焦功能

    编辑文档 目录 1 开发伙伴平台:   2 详细描述   3 在S60第三版FP2和较新手机上使用自动对焦   4 使用S60第三版和第三版FP1上的自动对焦    编辑本段 回目录开发伙伴平台: S ...

  3. 相机自动对焦AF原理

    相机自动对焦AF原理 AF性能是判断相机好坏的重要指标,主要从准确度和速度两个方面来进行考察,本文将介绍自动对焦的几种方式. 一.凸透镜成像原理 二.三种对焦方法 有公式在手,只要给相机安个测距仪就好 ...

  4. 相机自动对焦 OpenCV 图像清晰度评价

    原文:https://blog.csdn.net/dcrmg/article/details/53543341 OpenCV 图像清晰度评价(相机自动对焦) 版权声明:本文为博主原创文章,转载请注明出 ...

  5. OpenCV 图像清晰度评价算法(相机自动对焦)

    相机的自动对焦要求相机根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和CCD之间的距离,保证像平面正好投影到CCD的成像表面上.这时候物体的成像比较清晰,图像细节信息丰富. 相 ...

  6. OpenCV 图像清晰度评价(相机自动对焦)

    最近想实现相机自动对焦,也就是需要图像清晰度评价,在网上查找. 第一个不错文章是:无参考图像的清晰度评价方法 http://nkwavelet.blog.163.com/blog/static/227 ...

  7. opencv java图片清晰度_OpenCV 图像清晰度评价(相机自动对焦)

    相机的自动对焦要求相机根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和CCD之间的距离,保证像平面正好投影到CCD的成像表面上.这时候物体的成像比较清晰,图像细节信息丰富. 相 ...

  8. 用Java实现相机滤镜功能(一)

    今天我们来用java实现相机滤镜功能.显然首先要有一个窗体,所以我们创建类来设置窗体,类名取为VideoCapture,这里我们简写一下,让VideoCapture类继承JFrame,作为它的子类,然 ...

  9. BananaPi上ov5640摄像头自动对焦功能的实现

    经过一段时间的学习,找了很多ov5640的资料,终于把自动对焦功能实现了. ov5640是一款用在平板和手机上的摄像头,像素为500W,这个像素在目前来讲不算高,中低端手机的像素都比这个高,但是对于学 ...

最新文章

  1. Android APK 文件自动安装
  2. thinkphp5带条件分页
  3. 欢乐纪中某A组赛【2019.7.10】
  4. 3.1_ _2_ 内存管理的概念
  5. bzoj 4031 [HEOI2015]小Z的房间
  6. 【Flink】Flink ES6写入报错 IncompatibleClassChangeError: Implementing class
  7. python整型数据源码分析_大师兄的Python源码学习笔记(三): 整数对象
  8. Python常用模块库下载及安装
  9. 土方回填施工方案范本_土方回填施工方案范本
  10. Unity2019最新ECS架构开发MMO游戏笔记更新计划
  11. 全面的关于OLAP数仓总结
  12. 高手教你ie主页被篡改怎么办|加个参数永远不怕IE主页被修改
  13. Unity 生命周期 Reset() 的使用
  14. 音乐、游戏、教育,谁是字节跳动的下一个“抖音”?
  15. python程序性能监控
  16. CSS3中引入多种自定义字体(font-face)
  17. 有输入和输出的c语言大作业题目,C语言大作业题目2011.pdf
  18. 云盒子企业私有云对局域网共享软件的代替
  19. 《地理信息系统导论》 坐标系统 复习题
  20. C++day06 继承的关系

热门文章

  1. 自己拥有一台服务器可以做哪些很酷的事情?
  2. 如何保存卡住的wps_我告诉你wps卡住了怎么办
  3. intellij idea 类和文件夹(目录)左上角出现小叉号
  4. 第一章 Web MVC简介 —— 跟开涛学SpringMVC 博客分类: 跟开涛学SpringMVC webmvcjavaeespring跟开涛学SpringMVC Web MVC简介 1.1、We
  5. java date dec_java – 将日期从“2009-12 Dec”格式转换为“31-DEC-2009”
  6. python tensorflow车型识别(一):建立数据
  7. 计算机可以计算出十的一百次方吗,世界上最大的数字单位 古戈尔(1古戈尔等于10的100次方)...
  8. 自适应动态规划matlab,自适应动态规划ADP
  9. Skype for Business Server与Microsoft Teams的长期共存模式
  10. 基于区块链的去中心化存储(区块链存储)的工作流程