Skip to main content
ARShow
ARShow
 首页 » 资源教程

Unity3d Vive开发教程: Vive 前置摄像头浅析3——OpenVR自带实例API解析

2016年08月28日 00:05:1424740

这一节将分析API的具体功能及代码调用。

OpenVR 从1.0.0版本起,在OpenVR.cs中包含了CVRTrackedCamera这个类,然而最新版的SteamVR插件(V1.1.0)中尚不包含该类。

在OpenVR最新版本(1.0.2)版本中已包含12个函数,简单的介绍下作用:

GetCameraErrorNameFromEnum:获取错误类型转换成文本名称。

HasCamera:是否有外置相机;

GetCameraFrameSize:获取相机帧缓存大小;

GetCameraIntrinisics:看返回结果是相机的focallength焦距和center中心;

GetCameraProjection:获取相机投影矩阵,znear,zfar;

AcquireVideoStreamingService:申请获取视频流;

ReleaseVideoStreamingService:释放申请;

GetVideoStreamFrameBuffer:获取视频流帧缓存;

GetVideoStreamTextureSize:获取视频流图像尺寸;

GetVideoStreamTextureD3D11:获取D3D11视频流图像;

GetVideoStreamTextureGL:获取GL视频流图像;

ReleaseVideoStreamTextureGL:释放D3D11视频流图像;

自带的实例中用到的只包括以下几个,按程序执行顺序:

HasCamera和GetCameraErrorNameFromEnum。在CQTrackedCameraOpenVRTest::InitOpenVR()函数中;

GetCameraFrameSize和AcquireVideoStreamingService。在CQTrackedCameraOpenVRTest::StartVideoPreview();

GetVideoStreamFrameBuffer。在CQTrackedCameraOpenVRTest::OnDisplayRefreshTimeout();

最后调用CQCameraPreviewImage::SetFrameImage( )将视频流画出来。基本上用这几个函数就可以调用摄像头的图像了。

另外API中有图像类型的枚举变量:

public enumEVRTrackedCameraFrameType

{

   Distorted = 0,

   Undistorted = 1,

   MaximumUndistorted = 2,

   MAX_CAMERA_FRAME_TYPES = 3,

}

各参数获取的图像如下:第一张是Distorted的正常画面,第三章的右上角分辨率是1224x920,但图像扭曲的很厉害,而且边缘也不太清晰。看代码的注释,是说其包含了Invalid的部分图像(将不太清晰部分裁掉了?)不太明白为什么相机拍出来的会有不可用部分,求大神解答!

Unity3d Vive开发教程: Vive 前置摄像头浅析3——OpenVR自带实例API解析 资源教程

PS1: 在Unity的商店中有Valve公司The Lab 游戏的源码分享,The Lab Renderer。还不知道的赶紧下载学习下吧!之所以提这个是因为里面有24个Vive前置摄像头视频处理的函数,比开源的OpenVR中还多,这算不算泄露了内部版本?!有兴趣的赶紧研究研究啊。

PS2: 如何在Unity中利用API调用摄像头还没攻关,之前有用过WebCamera这个Unity的API去获取图像并作为texture放到场景中。利用OpenVR的API应该是在获取FrameBuffer后,将其保存为texture再放入场景就行。等弄出来以后我会再share具体的工程!


评论列表暂无评论
发表评论