本文档介绍openvr上关于显示接口的内容,基于目前(2017.10.09)最新版本(openVR V1.0.10)进行描述,并你可以基于开源项目openvr_survivor对这些接口进行修改和验证.
目前显示接口包括IVRDisplayComponent,IVRVirtualDisplay,IVRDriverDirectModeComponent
void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight )用来设置窗口的位置和尺寸.
参数说明:
bool IsDisplayOnDesktop( )显示是否是桌面扩展显示
bool IsDisplayRealDisplay( )显示是否真实显示器
注:”IsDisplayRealDisplay”和”IsDisplayOnDesktop”,在实际使用中,这2个接口的返回值,并不会影响扩展显示和直接渲染,应该是一个弃用的接口,官网上查不到更多信息.
void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight )获取处理过程中被畸变影响的渲染目标的大小.
这个接口设定的参数是一个建议值,应用程序仍然可以随意设定渲染目标的大小,合成器会根据情况进行缩放.一般设定为显示屏大小一致.
注:这里我在survivor工程上做了一个实验,如果把”renderWidth”和”renderHeight”设置为分辨率的1/4,也许处理效率上会增加(这里我没实际测量)将会看到画质被降低了很多.这里还是建议设定为与显示器分辨率大小一致.
void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight )获取左/右眼视口的位置和大小
参数说明:
这里如果有横竖屏切换的,可以调整这里的参数来实现.
void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom )用来设置你的投影矩阵
参数说明:
关于投影矩阵可以参考这个资料opengl projection matrix.
关于这个接口使用有一个详解的链接
DistortionCoordinates_t ComputeDistortion( EVREye eEye, float fU, float fV )基于左/右眼的UV做反畸变功能的接口,UV坐标的(0,0)表示视口的左下角,(1,1)表示视口的右下角
参数说明:
这个接口还可以用来配合GetEyeOutputViewport来做横竖屏的切换,以及视图的旋转.
IVRVirtualDisplay接口目前存在闪黑的bug,等修复后整理.
IVRVirtualDisplay和IVRDriverDirectModeComponent这两个接口用来实现”扩展显示”和”直接渲染”的,后续再做详解.