让我们假设我们有一些C ++ OpenGL游戏。它使用我们自己的渲染引擎(也不是Unity,也不是UE等)。让我们简化我们的问题。
例如,我们需要在VR模式下渲染一些简单的立方体。我们应该为此做些什么?
我知道我们需要将屏幕分成两部分。那么呢?如何计算两个部件的旋转距离?
VR是指VR Box,Gear VR,Oculus Rift等设备。
答案 0 :(得分:3)
所有主要耳机都在其网站上提供API文档,说明如何将VR支持集成到您的引擎中。您应参阅该文档以获取详细信息。我的经验主要是使用Oculus SDK,但其他SDK类似。
您通常不会将屏幕直接拆分为两个 - 您向SDK提供左眼和右眼视图的图像,SDK会对镜头光学系统执行扭曲并将输出发送到HMD显示器
SDK提供了API来获取渲染每只眼睛视图所需的摄像头和视口参数。使用Oculus SDK,您还可以通过API调用获取每个眼睛视图的渲染目标。您可以根据API为HMD位置,方向,视野,目标分辨率等提供给您的信息,为每个眼睛视图构建视图和投影矩阵。
每只眼睛的渲染基本上与你在引擎中所做的一样,但当然你必须使用SDK提供的相机和视口信息渲染两次(每只眼睛一次),并且可能希望渲染一个第三个视图显示在常规监视器上。您可能希望重新构建引擎的某些部分以提高效率,因为左眼和右眼视图非常相似,而不是天真地渲染整个场景两次,但这并非绝对必要。
可能会在一帧结束时打电话告诉SDK您已完成渲染并提交已完成的眼睛缓冲区以供显示。除此之外,没有那么多。 VR渲染的大部分挑战在于实现所需的性能,而不是在SDK的集成中,这在显示方面相当简单。