CameraDeviceBaseBehaviour Class

Inherits: DeviceAbstractBehaviour

Description

CameraDeviceBaseBehaviour是在AR场景中控制CameraDevice的component。

CameraDevice工作在它自己的线程上。你可以Open/Close camera,也可以在任意时间关闭并重新开启一个不同的camera 设备或是设置不同的参数。StartCapture/StopCapture用来开始和停止camera预览,这两个操作不会影响之前所设置的camera参数。camera的控制方法与系统API提供的方法类似。

CameraDevice是tracker以及其它算法的输入源。CameraDeviceBaseBehaviour包含AR链条的入口, OpenAndStart 。

下面这段代码演示了在后置camera在使用并且跟踪也在进行中的情况下,如何动态切换成前置camera。

ARBuilder.Instance.CameraDeviceBehaviours[0].Close();
ARBuilder.Instance.CameraDeviceBehaviours[0].CameraDeviceType = CameraDeviceBaseBehaviour.DeviceType.Front;
ARBuilder.Instance.CameraDeviceBehaviours[0].OpenAndStart();

前置摄像头和水平翻转

在使用 Android 或 iOS 的前置摄像头并且 HorizontalFlip 设为 false的情况下,或者在使用其他摄像头并且 HorizontalFlip 设为 true 的情况下,EasyAR 会开启水平翻转模式。

在水平翻转模式下,只有在显示 camera 图像的时候,图像会相较原始数据水平翻转,并且

  1. GL.SetRevertBackfacing(true) 会在 RenderCameraBaseBehaviour.OnPreRender 中被调用

  2. GL.SetRevertBackfacing(false) 会在 RenderCameraBaseBehaviour.OnPostRender 中被调用 (since 2.1.0)

用于跟踪等算法的 camera 数据不会被翻转。

默认行为与系统camera相同,在使用前置摄像头的时候看起来和照镜子一样。可以通过反转 HorizontalFlip 来改变这个行为。

Public Types

enum FocusMode{Normal, Triggerauto, Continousauto, Infinity, Macro}
enum DeviceType{Default, Back, Front}

Public Properties

DeviceType CameraDeviceType
int CameraIndex
bool HorizontalFlip
CameraCalibration Calibration
float FPS
Vector2I DeviceSize
float[] SupportedFPS
Vector2I[] SupportedSize
float ZoomScale
float MinZoomScale
float MaxZoomScale

Public Fields

float CameraFPS
Vector2 CameraSize
bool CaptureWhenStart
bool RequestPlatformPermission

Public Functions

void Close()
void OpenAndStart()
bool StartCapture()
bool StopCapture()
bool SetFlashTorchMode(bool on)
bool SetFocusMode(FocusMode focusMode)

Overwritten MonoBahaviour Functions

protected virtual void OnDestroy()
protected virtual void Start()

enum FocusMode

Constant

Value

Description

Normal

0

常规对焦模式,在这个模式下需要调用SetFocusMode(FocusMode.Triggerauto)来触发对焦。

Triggerauto

1

触发自动对焦。对焦模式将会被设为FocusMode.Normal.

Continousauto

2

连续自动对焦模式

Infinity

3

无穷远对焦模式

Macro

4

微距对焦模式。在这个模式下需要调用SetFocusMode(FocusMode.Triggerauto)来触发对焦。

enum Device

Constant

Value

Description

Default

0

默认camera

Back

1

后置camera

Front

2

前置camera

DeviceType CameraDeviceType

需要打开的设备。在桌面系统中,Device.Default表示默认的camera,而大于0的数值表示设备号码(从1开始编号)。它必须在调用O penAndStart之前被设上才会有效。

如果 CameraIndex 被设成了非0,open 方法将使用 CameraIndex 并无视 CameraDeviceType,否则 open 方法会使用 CameraDeviceType 来打开特定类型的 camera。

int CameraIndex

需要打开的设备。在桌面系统中,0表示默认的camera,而大于0的数值表示设备号码(从1开始编号)。它必须在调用OpenAndStart之前 被设上才会有效。

如果 CameraIndex 被设成了非0,open 方法将使用 CameraIndex 并无视 CameraDeviceType,否则 open 方法会使用 CameraDeviceType 来打开特定类型的 camera。

bool HorizontalFlip

水平翻转标志。如果设置,camera图像在显示时相对默认状态会水平翻转。

在使用 Android 或 iOS 的前置摄像头并且 HorizontalFlip 设为 false的情况下,或者在使用其他摄像头并且 HorizontalFlip 设为 true 的情况下,EasyAR 会开启水平翻转模式。

在水平翻转模式下,只有在显示 camera 图像的时候,图像会相较原始数据水平翻转,并且

  1. GL.SetRevertBackfacing(true) 会在 RenderCameraBaseBehaviour.OnPreRender 中被调用

  2. GL.SetRevertBackfacing(false) 会在 RenderCameraBaseBehaviour.OnPostRender 中被调用 (since 2.1.0)

用于跟踪等算法的 camera 数据不会被翻转。

默认行为与系统camera相同,在使用前置摄像头的时候看起来和照镜子一样。可以通过反转 HorizontalFlip 来改变这个行为。

float FPS

当前帧率。在set中最接近设置值的可选值将被使用。在成功的Open之后使用。

float[] SupportedFPS

当前设备支持的所有帧率。在成功的Open之后使用。

Vector2I DeviceSize

当前图像大小。在set中最接近设置值的可选值将被使用。在成功的Open之后使用。

Vector2I[] SupportedSize

当前设备支持的所有图像大小。在成功的Open之后使用。

CameraCalibration Calibration

当前相机标定数据。在成功的Open之后使用。

float ZoomScale

相机缩放系数。在成功的Open之后使用。

float MinZoomScale

最小支持的相机缩放系数。在成功的Open之后使用。

float MaxZoomScale

最大支持的相机缩放系数。在成功的Open之后使用。

float CameraFPS

Camera帧率。它必须在调用OpenAndStart之前被设上才会有效。

Vector2 CameraSize

Camera大小。它必须在调用OpenAndStart之前被设上才会有效。

bool CaptureWhenStart

是否在MonoBehaviour.Start调用的时候打开设备并开始捕获图像。如果为false,你必须调用OpenAndStart来启动整个 AR工作链。

bool RequestPlatformPermission

是否在打开camera的时候请求系统权限。如果false,你必须手动保证系统权限已经被申请。

void Close()

关闭camera,整个AR链条将会停止。你可以使用 bind 调用来修改AR场景内物体的连接和数据流向,也可以通过更改CameraDevic eType来改变camera设备。调用OpenAndStart来重新启动整个场景。

void OpenAndStart()

打开类型为CameraDeviceType的设备并立即开始捕获图像。

这是整个AR场景的起始点。在调用这个方法之前,除了ImageTargetBaseBehaviour.Bind以外的所有连接(所有 bind 调用)必须已经完成。它会使用 bind 方法所建立的连接来启动整个AR场景。

bool StartCapture()

开始捕获图像。

bool StopCapture()

停止捕获图像。所有连接和配置将保持不变。