浏览 : 6288

[问题] Vive 前置摄像头浅析3——OpenVR自带实例API解析

蒂姆许2016-7-27 15:55

    这一节将分析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的部分图像(将不太清晰部分裁掉了?)不太明白为什么相机拍出来的会有不可用部分,求大神解答!

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

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

    Where Amazing Happens!
    检举 回应

一般用户

等级1

路过旅人

许慧2018-5-25 08:29


游戏文章分享