Unity3D Vuforia Android 相机调焦
来源:互联网 发布:中国司法大数据服务网 编辑:程序博客网 时间:2024/05/16 04:59
/*============================================================================== * Copyright (c) 2012-2014 Qualcomm Connected Experiences, Inc. All Rights Reserved. * ==============================================================================*/using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Linq;/// <summary>/// UI Event Handler class that handles events generated by user-tap actions/// over the UI Options Menu/// </summary>public class ImageTargetUIEventHandler : ISampleAppUIEventHandler { #region PUBLIC_MEMBER_VARIABLES public override event System.Action CloseView; public override event System.Action GoToAboutPage; #endregion PUBLIC_MEMBER_VARIABLES #region PRIVATE_MEMBER_VARIABLES private static bool sExtendedTrackingIsEnabled; private ImageTargetUIView mView; private bool mCameraFacingFront; #endregion PRIVATE_MEMBER_VARIABLES #region PUBLIC_MEMBER_PROPERTIES public ImageTargetUIView View { get { if(mView == null){ mView = new ImageTargetUIView(); mView.LoadView(); } return mView; } } /// <summary> /// Currently, there is no mechanism to query the SDK to know whether or not extended tracking is enabled/disabled. /// Therefore, it needs to be handled at the app layer. /// </value> public static bool ExtendedTrackingIsEnabled { get { return sExtendedTrackingIsEnabled; } } #endregion PUBLIC_MEMBER_PROPERTIES #region PUBLIC_METHODS public override void UpdateView (bool tf) { this.View.UpdateUI(tf); } public override void Bind() { this.View.mExtendedTracking.TappedOn += OnTappedToTurnOnTraking; this.View.mCameraFlashSettings.TappedOn += OnTappedToTurnOnFlash; this.View.mAutoFocusSetting.TappedOn += OnTappedToTurnOnAutoFocus; this.View.mCameraFacing.TappedOnOption += OnTappedToTurnCameraFacing; this.View.mDataSet.TappedOnOption += OnTappedOnDataSet; this.View.mCloseButton.TappedOn += OnTappedOnCloseButton; this.View.mAboutLabel.TappedOn += OnTappedOnAboutButton; EnableContinuousAutoFocus(); } public override void UnBind() { this.View.mExtendedTracking.TappedOn -= OnTappedToTurnOnTraking; this.View.mCameraFlashSettings.TappedOn -= OnTappedToTurnOnFlash; this.View.mAutoFocusSetting.TappedOn -= OnTappedToTurnOnAutoFocus; this.View.mCameraFacing.TappedOnOption -= OnTappedToTurnCameraFacing; this.View.mDataSet.TappedOnOption -= OnTappedOnDataSet; this.View.mCloseButton.TappedOn -= OnTappedOnCloseButton; this.View.mAboutLabel.TappedOn -= OnTappedOnAboutButton; sExtendedTrackingIsEnabled = false; this.View.UnLoadView(); mView = null; } public override void TriggerAutoFocus() { StartCoroutine(TriggerAutoFocusAndEnableContinuousFocusIfSet()); } public override void SetToDefault(bool tf) { this.View.mCameraFlashSettings.Enable(tf); } #endregion PUBLIC_METHODS #region PRIVATE_METHODS /// <summary> /// Activating trigger autofocus mode unsets continuous focus mode (if was previously enabled from the UI Options Menu) /// So, we wait for a second and turn continuous focus back on (if options menu shows as enabled) /// </returns> private IEnumerator TriggerAutoFocusAndEnableContinuousFocusIfSet() { //triggers a single autofocus operation if (CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO)) { this.View.FocusMode = CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO; } yield return new WaitForSeconds(1.0f); //continuous focus mode is turned back on if it was previously enabled from the options menu if(this.View.mAutoFocusSetting.IsEnabled) { if (CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO)) { this.View.FocusMode = CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO; } } Debug.Log (this.View.FocusMode); } private void OnTappedOnAboutButton(bool tf) { if(this.GoToAboutPage != null) { this.GoToAboutPage(); } } private void OnTappedToTurnOnTraking(bool tf) { if(!ExtendedTracking(tf)) { this.View.mExtendedTracking.Enable(false); ImageTargetUIEventHandler.sExtendedTrackingIsEnabled = false; } else { ImageTargetUIEventHandler.sExtendedTrackingIsEnabled = tf; this.View.mExtendedTracking.Enable(tf); // to better demostrate the effect, we switch the augmentation models - a teapot is used for normal tracking, // a skyscraper for extended tracking. SwitchModels(tf); } OnTappedToClose(); } private void OnTappedToTurnOnFlash(bool tf) { if(tf) { if(!CameraDevice.Instance.SetFlashTorchMode(true) || mCameraFacingFront) { this.View.mCameraFlashSettings.Enable(false); } } else { CameraDevice.Instance.SetFlashTorchMode(false); } Debug.Log ("CameraFacingFront = " + mCameraFacingFront); OnTappedToClose(); } //We want autofocus to be enabled when the app starts private void EnableContinuousAutoFocus() { if (CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO)) { this.View.FocusMode = CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO; this.View.mAutoFocusSetting.Enable(true); } } private void OnTappedToTurnOnAutoFocus(bool tf) { if(tf) { if (CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO)) { this.View.FocusMode = CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO; } else { this.View.mAutoFocusSetting.Enable(false); } } else { if (CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_NORMAL)) { this.View.FocusMode = CameraDevice.FocusMode.FOCUS_MODE_NORMAL; } } OnTappedToClose(); } private void OnTappedToTurnCameraFacing(int val) { if(val == 0) { //internally, flash is always turned off everytime it tries to switch to front camera //so updating the UI options to reflect that. this.View.mCameraFlashSettings.Enable(false); if(ChangeCameraDirection(CameraDevice.CameraDirection.CAMERA_FRONT)) { mCameraFacingFront = true; } else { ChangeCameraDirection(CameraDevice.CameraDirection.CAMERA_BACK); mCameraFacingFront = false; this.View.mCameraFacing.EnableIndex(1); } } else { ChangeCameraDirection(CameraDevice.CameraDirection.CAMERA_BACK); mCameraFacingFront = false; } OnTappedToClose(); } private void ResetCameraFacingToBack() { CameraDevice.Instance.Stop(); CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_BACK); CameraDevice.Instance.Start(); mCameraFacingFront = false; } private bool ChangeCameraDirection(CameraDevice.CameraDirection direction) { bool directionSupported = false; CameraDevice.Instance.Stop(); CameraDevice.Instance.Deinit(); if(CameraDevice.Instance.Init(direction)) { directionSupported = true; } CameraDevice.Instance.Start(); return directionSupported; } private void OnTappedOnDataSet(int val) { if(val == 0) { ActivateDataSet("StonesAndChips"); } else { ActivateDataSet("Tarmac"); } OnTappedToClose(); } private void OnTappedToClose() { if(this.CloseView != null) { this.CloseView(); } } private void OnTappedOnCloseButton() { OnTappedToClose(); } private void ActivateDataSet(string datasetPath) { //ImageTracker tracks ImageTargets contained in a DataSet and provides methods for creating, activating and deactivating datasets. ImageTracker imageTracker = TrackerManager.Instance.GetTracker<ImageTracker>(); IEnumerable<DataSet> datasets = imageTracker.GetDataSets(); IEnumerable<DataSet> activeDataSets = imageTracker.GetActiveDataSets(); List<DataSet> activeDataSetsToBeRemoved = activeDataSets.ToList(); //1. Loop through all the active datasets and deactivate them. foreach(DataSet ads in activeDataSetsToBeRemoved) { imageTracker.DeactivateDataSet(ads); } //Swapping of the datasets should not be done while the ImageTracker is working at the same time. //2. So, Stop the tracker first. imageTracker.Stop(); //3. Then, look up the new dataset and if one exists, activate it. foreach(DataSet ds in datasets) { if(ds.Path.Contains(datasetPath)) { imageTracker.ActivateDataSet(ds); } } //4. Finally, start the image tracker. imageTracker.Start(); } private void SwitchModels(bool tf) { ImageTargetTrackableEventHandler[] trackableEventHandlers = GameObject.FindObjectsOfType(typeof(ImageTargetTrackableEventHandler)) as ImageTargetTrackableEventHandler[]; foreach(ImageTargetTrackableEventHandler handler in trackableEventHandlers) { if(handler.isBeingTracked) { Renderer[] rendererComponents = handler.GetComponentsInChildren<Renderer>(); Collider[] colliderComponents = handler.GetComponentsInChildren<Collider>(); foreach (Renderer component in rendererComponents) { if(component.gameObject.name == "tower") component.enabled = tf; if(component.gameObject.name == "teapot") component.enabled = !tf; } foreach (Collider component in colliderComponents) { if(component.gameObject.name == "tower") component.enabled = tf; if(component.gameObject.name == "teapot") component.enabled = !tf; } } } } /// <summary> /// This method turns extended tracking on or off for all currently available targets. /// Extended tracking allows to track targets when they are not in view. /// Returns false if extended tracking is not supported on the device and true otherwise. /// </summary> private bool ExtendedTracking(bool tf) { // the StateManager gives access to all available TrackableBehavours StateManager stateManager = TrackerManager.Instance.GetStateManager(); // We iterate over all TrackableBehaviours to start or stop extended tracking for the targets they represent. bool extendedTrackingStateChanged = true; foreach(var behaviour in stateManager.GetTrackableBehaviours()) { var imageBehaviour = behaviour as ImageTargetBehaviour; if(imageBehaviour != null) { if(tf) { //only if extended tracking is supported if(!imageBehaviour.ImageTarget.StartExtendedTracking()) { extendedTrackingStateChanged = false; } } else { if(!imageBehaviour.ImageTarget.StopExtendedTracking()) { extendedTrackingStateChanged = false; } } } } if(!extendedTrackingStateChanged) { Debug.LogWarning("Extended Tracking Failed!"); } return extendedTrackingStateChanged; } #endregion PRIVATE_METHODS}
0 0
- Unity3D Vuforia Android 相机调焦
- Unity3D Vuforia Android 相机聚焦模式设置
- Android中级第九讲--相机调焦
- 工业相机“调焦”
- Unity3D Vuforia Android 拨打电话
- 相机的变焦与调焦
- 关于vuforia摄像头的自动调焦代码
- Unity3d vuforia 调用三星平板相机聚焦的问题
- Unity3d-Vuforia-Android 开发环境搭建
- 相机对焦和调焦距的区别是什么 ?
- Vuforia实现相机自动对焦
- Unity3D AR技术 vuforia SDK
- Vuforia unity3d 发布 eclipse工程
- Vuforia unity3d 发布 eclipse工程
- Unity3d vuforia增强现实(AR)
- Unity3D Vuforia 脱卡时遇到问题
- (Unity3d)Vuforia开发基础
- Vuforia SDK---- AR开发vuforia 相机自动对焦代码实现
- IOS之禁用UIWebView的缩放
- Android应用基础——Intent Permission Fragment
- 10个最常见的 HTML5 面试题及答案
- JavaScript中indexOf函数
- 使用CocoaPods管理依赖库(转载—修改)
- Unity3D Vuforia Android 相机调焦
- 安卓 按键点击事件
- poj-3286 Silver Cow Party
- Codeforces Round #288 (Div. 2) D.Tanya and Password(欧拉路径)
- CentOS6.4下Mysql数据库的安装与配置
- JavaScript中split函数
- leetcode.9---------------Palindrome Number
- 使用Ant批量打包Android应用完全指南
- 伪静态