openvr显示相关接口

概述

本文档介绍openvr上关于显示接口的内容,基于目前(2017.10.09)最新版本(openVR V1.0.10)进行描述,并你可以基于开源项目openvr_survivor对这些接口进行修改和验证.

显示接口

目前显示接口包括IVRDisplayComponent,IVRVirtualDisplay,IVRDriverDirectModeComponent

IVRDisplayComponent

GetWindowBounds

void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight )用来设置窗口的位置和尺寸.
参数说明:

  • pnX和pnY
    设置显示窗口左上角的起始坐标,比如你有2个显示器,显示器1的分辨率为1920x1080,显示器2的分辨率为1280x1024,那么如果希望在第一个显示显示,将pnX和pnY设置为0,如果希望在第二个显示器显示,则将pnX设置为1920,pnY设置为0即可.
  • pnWidth和pnHeight
    显示窗口的大小,这个与显示屏的实际分辨率相对应.

IsDisplayOnDesktop

bool IsDisplayOnDesktop( )显示是否是桌面扩展显示

IsDisplayRealDisplay

bool IsDisplayRealDisplay( )显示是否真实显示器
注:”IsDisplayRealDisplay”和”IsDisplayOnDesktop”,在实际使用中,这2个接口的返回值,并不会影响扩展显示和直接渲染,应该是一个弃用的接口,官网上查不到更多信息.

GetRecommendedRenderTargetSize

void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight )获取处理过程中被畸变影响的渲染目标的大小.
这个接口设定的参数是一个建议值,应用程序仍然可以随意设定渲染目标的大小,合成器会根据情况进行缩放.一般设定为显示屏大小一致.
注:这里我在survivor工程上做了一个实验,如果把”renderWidth”和”renderHeight”设置为分辨率的1/4,也许处理效率上会增加(这里我没实际测量)将会看到画质被降低了很多.这里还是建议设定为与显示器分辨率大小一致.

GetEyeOutputViewport

void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight )获取左/右眼视口的位置和大小
参数说明:

  • eEye
    Eye_Left或Eye_Right
  • pnX和pnY
    起始位置
  • pnWidth和pnHeight
    宽/高大小

这里如果有横竖屏切换的,可以调整这里的参数来实现.

GetProjectionRaw

void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom )用来设置你的投影矩阵
参数说明:

  • eEye
    Eye_Left或Eye_Right
  • pfLeft,pfRight,pfTop,pfBottom
    透视投影后所成的像的左,右,上,下的坐标位置.

关于投影矩阵可以参考这个资料opengl projection matrix.
关于这个接口使用有一个详解的链接

ComputeDistortion

DistortionCoordinates_t ComputeDistortion( EVREye eEye, float fU, float fV )基于左/右眼的UV做反畸变功能的接口,UV坐标的(0,0)表示视口的左下角,(1,1)表示视口的右下角
参数说明:

  • eEye
    Eye_Left或Eye_Right
  • fU或fV
    UV坐标

这个接口还可以用来配合GetEyeOutputViewport来做横竖屏的切换,以及视图的旋转.

IVRVirtualDisplay

IVRVirtualDisplay接口目前存在闪黑的bug,等修复后整理.

IVRDriverDirectModeComponent

IVRVirtualDisplayIVRDriverDirectModeComponent这两个接口用来实现”扩展显示”和”直接渲染”的,后续再做详解.

你可能感兴趣的:(openVR)