# 原生 PC SDK

# 准备工作

# 设备连接

连接小派的头显设备到电脑,安装 Pimax 客户端软件,并确认 Pimax 客户端软件已识别并连接到小派设备,并可以体验 Pimax 客户端软件中的内容。

# SDK安装

这里下载 Windows SDK 并安装,假设安装路径为 C:\Program Files\Pimax\Sdk, 本文后续将以此为 SDK 安装路径,开发者如果将 SDK 安装到不同目录,在相关的步骤中将此路径替换为开发者的即可。

# 相关基础知识

本文假定开发者已具备基本的c、c++编程技能,熟悉使用DirectX或者OpenGL的API使用。

注意

目前SDK仅支持DirectX11和OpenGL的开发(DirectX12和Vulkan将在未来支持))

# 编译选项设置

将 C:\Program Files\Pimax\Sdk\Include 添加到开发者编译工程的头文件包含路径中, 没有额外的Lib进行链接,只需要在代码中包含相关的头文件即可。

# 相关术语

  1. VR:虚拟现实
  2. PVR:Pimax VR
  3. HMD:头显设备
  4. App:应用程序
  5. PVR Runtime: 对小派设备进行管理使用的进程,并负责处理App的相关请求

# 主要功能介绍

# 头文件使用

在相关的代码中只要包含PVR_API.h就可以。 如果是基于DirectX做相关的渲染工作,再包含PVR_API_D3D.h; 如果是基于OpenGL做相关的渲染工作,则包含PVR_API_GL.h

# 创建运行环境

每一个App在可以使用SDK提供的功能之前需要使用pvr_initialise初始化唯一的运行环境,并在App退出前调用pvr_shutdown。

# 创建Session

每一个App需要通过pvr_createSession创建一个Session来和PVR Runtime通信, 记得在App退出前调用pvr_destroySession销毁这个Session, 一个App可以创建多个Session。

# 创建TextureSwapChain

类似于DXGI的SwapChainBuffer,通过pvr_createTextureSwapChainDX或者pvr_createTextureSwapChainGL创建,每个SwapChainBuffer包含多个texture buffer, 在App的每一帧中都需要通过pvr_getTextureSwapChainCurrentIndex获取当前可以使用的buffer的idx,然后通过pvr_getTextureSwapChainBufferDX或者pvr_getTextureSwapChainBufferGL获取对应的buffer,app将画面渲染到这个buffer中,最后通过pvr_commitTextureSwapChain提交.

# 获取定位信息

在App中渲染出正确的左右眼画面,需要获取到正确的眼睛姿态(位置和方向) 信息;通过pvr_getTrackingState可以获取指定时间点的头部姿态(还有手柄),通常使用pvr_getPredictedDisplayTime获取的时间点,通过pvr_getEyeRenderInfo获取 头部和眼睛的相对姿态,然后通过pvr_calcEyePoses计算出最终的眼睛姿态。App 中需要使用这个计算出来的最终姿态来做为View Matrix来使用。

# 渲染立体画面

App 中将 TextureSwapChain 的当前 buffer 做为 render target,使用上一步骤得到 View Matrix,利用 pvrMatrix4f_Projection 获取Projection Matrix,将 App 的内容渲染到 TextureSwapChain中。

# 提交立体画面到设备

通过pvr_submitFrame将App渲染过的TextureSwapChain提交到PVR Runtime,并最终显示到小派头显设备中。

# 处理手柄控制器输入

在App的Loop中可以通过pvr_getInputState获取当前手柄的按键信息。

# 多显卡的处理

App 中需要通过 pvr_getEyeDisplayInfo 获取指定的 Adapter Id,然后使用指定的 Adapter 来创建D3D Device。

# Samples

SimpleVRDemoDX11: 基于 DirectXTK 的 VR demo。