请问Unity3D如何实现两个相机高频的切换?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问Unity3D如何实现两个相机高频的切换?相关的知识,希望对你有一定的参考价值。

已经可以实现通过按键切换两台相机,但是不知道如何让两个camera自动地高频地(比如60Hz,120Hz)来回切换。请问用代码的话如何实现?或者其他什么可行方法?希望能详解一下,谢谢!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraChange : MonoBehaviour


    [Header("第一个摄像机")]
    public GameObject m_FirstCamera;
    [Header("第二个摄像机")]
    public GameObject m_SecondCamera;

    [Header("HZ")]
    public float m_HZNum;               //HZ
    private float m_waitTime;

    void Start()
    
        if (m_FirstCamera == null)
        
            Debug.LogError("缺少第一个摄像机");
        
        if (m_SecondCamera == null)
        
            Debug.LogError("缺少第二个摄像机");
        
        if (m_HZNum <= 0)
        
            Debug.LogError("HZ数不能小于等于0");
        

        m_waitTime = 1 / m_HZNum;

        m_FirstCamera.SetActive(true);
        m_SecondCamera.SetActive(false);
        
        //想在什么地方开始切换,就在什么地方开始下面的协成
        StartCoroutine(ChangeCamera());
    

    IEnumerator ChangeCamera()
    
        //如果想要关闭,就将true变成一个可控的bool值,什么时候想关闭,就将bool值换成false。
        while (true)
        
            yield return new WaitForSeconds(m_waitTime);

            //频繁切换活跃不是很好,你也可以改成自己的改变摄像机的方法,或者改摄像机的ViewPort Rect也可以
            m_FirstCamera.SetActive(!m_FirstCamera.activeSelf);
            m_SecondCamera.SetActive(!m_SecondCamera.activeSelf);
        
    

场景中建一个空物体,然后挂载这个脚本,把两个照相机拖进去,然后再给设置HZ数。

而且太快太快的话,可能也不行。

参考技术A 这是要做裸眼3d啊

如何与 OpenCV 交互地在相机之间切换?

【中文标题】如何与 OpenCV 交互地在相机之间切换?【英文标题】:How to switch between camera interactively with OpenCV? 【发布时间】:2020-12-01 12:11:48 【问题描述】:

我想在连接到计算机的相机之间切换。我有 PyQt5 列表项和其中列出的所有相机。所以我也有相机索引。但是,我无法以交互方式在相机之间成功切换。当在列表中选择了一个新相机时,我按下“REFRESH”按钮以在 PyQt 标签上显示选定的相机流。如何在相机之间切换?

我使用以下代码显示流并在它们之间切换:

-参考:https://***.com/a/44404713/13080899

class Stream_Thread(QThread):
changePixmap = pyqtSignal(QImage)

def __init__(self):
    super(Stream_Thread, self).__init__()
    self.ref = False        #refresh flag

def set_index(self, index = 0):
    self.index = index

def refresh(self):
    self.ref = True

def run(self):
    capt = cv2.VideoCapture(self.index, cv2.CAP_DSHOW)

    while(True):
        ret, frame = capt.read()

        if ret:
            rbgImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            h, w, ch = rbgImage.shape
            bytesPerLine = ch*w
            convertToQtFormat = QImage(rbgImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
            p = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)
            self.changePixmap.emit(p)

        if self.ref:
            break

    capt.release()

“刷新”按钮方法。

    def button_refresh_clicked(self, th):
    curr_id = self.get_cam_id()
    th.refresh()
    
    th = Stream_Thread()
    th.set_index(curr_id)
    th.start()

【问题讨论】:

【参考方案1】:

我找到了正确的方法。终止当前线程,设置视频捕获索引并重新启动线程:

def button_refresh_clicked(self, th):
    curr_id = self.get_cam_id()
    th.terminate()

    th.set_index(curr_id)
    th.start()

【讨论】:

以上是关于请问Unity3D如何实现两个相机高频的切换?的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 新人求助 按钮控制同场景多个相机切换的问题

Unity3D 利用FSM设计相机跟随实现

unity3D 如何导入3d场景

你好,请问在UNITY3D中如何实现用鼠标左键拖拽控制一个组合物体的旋转啊?

unity3D摄像机的快捷键调整

如何让角色转向相机的方向? [Unity3D]