请问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如何实现两个相机高频的切换?的主要内容,如果未能解决你的问题,请参考以下文章