【问题标题】:How to Switch/Change Front and back Vuforia AR Camera using a button?如何使用按钮切换/更改前后 Vuforia AR 摄像头?
【发布时间】:2018-09-30 05:20:45
【问题描述】:

我正在使用 Unity 开发 AR 移动应用。

为此,我添加了一个 Vuforia AR 摄像头,它可以与我的笔记本电脑摄像头配合使用,并且可以在图像目标上显示 3D 模型。

我的问题是如何使用一个简单的按钮在 Android 设备上切换前置摄像头和后置摄像头?

我已尝试使用此代码示例在笔记本电脑摄像头和外部网络摄像头之间切换:

 using UnityEngine;
 using Vuforia;

 public class SwitchCamera : MonoBehaviour
 {
     private bool cameraMode = false;

     public void OnCameraChangeMode()
     {
         CameraDevice.CameraDirection currentDir = CameraDevice.Instance.GetCameraDirection();
         if (!cameraMode)
         {
             RestartCamera(CameraDevice.CameraDirection.CAMERA_FRONT);
             Debug.Log("Back Camera");
         }
         else
         {
             RestartCamera(CameraDevice.CameraDirection.CAMERA_BACK);
             Debug.Log("Front Camera");
         }
     }

     private void RestartCamera(CameraDevice.CameraDirection newDir)
     {
         CameraDevice.Instance.Stop();
         CameraDevice.Instance.Deinit();
         CameraDevice.Instance.Init(newDir);
         CameraDevice.Instance.Start();
     }
 }

【问题讨论】:

    标签: c# unity3d camera augmented-reality vuforia


    【解决方案1】:

    我使用了这段代码并且工作正常

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Vuforia;
    using TBEasyWebCam;
    
    
    public class ARManager : MonoBehaviour
    {
    #if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
        bool isTorchOn = false;
    #endif
    
        public void toggleTorch()
        {
    #if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
            if (EasyWebCam.isActive) {
                if (isTorchOn) {
                    //torchImage.sprite = torchOffSprite;
                    EasyWebCam.setTorchMode (TBEasyWebCam.Setting.TorchMode.Off);
                } else {
                    //torchImage.sprite = torchOnSprite;
                    EasyWebCam.setTorchMode (TBEasyWebCam.Setting.TorchMode.On);
                }
                isTorchOn = !isTorchOn;
            }
    #endif
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      正如更新:前置摄像头已从 Vuforia 中移除。 https://library.vuforia.com/content/vuforia-library/en/articles/Release_Notes/Vuforia-SDK-Release-Notes.html https://developer.vuforia.com/forum/unity/front-camera-deprecation

      已删除前置摄像头支持。现在只能访问后置摄像头(CameraDevice::init() 现在不带任何参数)。

      【讨论】:

        【解决方案3】:

        我已经尝试过这段代码,它运行良好。

        using UnityEngine;
        using Vuforia;
        
        public class Cameraa : MonoBehaviour
        {
            private bool on = true;
        
            public void Switch()
            {
                on = !on;
                if (on)
                {
                    CameraDevice.Instance.Stop();
                    CameraDevice.Instance.Deinit();
                    TrackerManager.Instance.GetTracker<ObjectTracker>().Stop();
        
                    CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_BACK);
                    CameraDevice.Instance.Start();
                    TrackerManager.Instance.GetTracker<ObjectTracker>().Start();
        
                }
                else if (!on)
                {
                    CameraDevice.Instance.Stop();
                    CameraDevice.Instance.Deinit();
        
                    TrackerManager.Instance.GetTracker<ObjectTracker>().Stop();
                    CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_FRONT);
        
                    CameraDevice.Instance.Start();
                    TrackerManager.Instance.GetTracker<ObjectTracker>().Start();
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          你好蒙塔瑟, 您只是忘记更改相机模式值。

               CameraDevice.CameraDirection currentDir = CameraDevice.Instance.GetCameraDirection();
               if (!cameraMode)
               {
                   RestartCamera(CameraDevice.CameraDirection.CAMERA_FRONT);
                   cameramode = true;
                   Debug.Log("Back Camera");
               }
               else
               {
                   RestartCamera(CameraDevice.CameraDirection.CAMERA_BACK);
                   cameramode = false;
                   Debug.Log("Front Camera");
               }
          

          除此之外,一切看起来都很棒。希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-31
            • 1970-01-01
            相关资源
            最近更新 更多