我目前正在使用Android应用程序来使用VR显示3D图片。每张3D图片都包含两个从略微不同的视角拍摄的图像:一个用于右眼,一个用于左眼。现在我需要将它们并排显示并应用失真校正。虽然并排部分应该很容易实现,但失真校正是另一回事。
查看VR失真校正的明显库是Google VR SDK。但是,我无法真正找到我需要的功能。显然,有两种方法可以在Google VR SDK中显示3D内容:
现在我的问题是:有没有办法在GvrView中显示2D图片(有或没有GvrView.StereoRenderer)?
或者如果不是这样的话:最好的方法是将图像绘制到正方形上并使其占据整个视野吗?或者我应该首先自己做扭曲?如果是这样,你知道一个很好的方法吗?
如果您有任何想法,请回答。非常感谢你提前!
Skoebuga
我在立体视频方面遇到了同样的问题,几天前我找到了解决方案。
快速回答您的问题:是的,您可以使用GvrView显示立体图像或视频,并为每只眼睛渲染部分图像/视频。
GvrView.Renderer或GvrView.StereoRenderer是必需的步骤,因为如果您没有为GvrView提供渲染器,则会出现NullPointerException。
这是一个基于Matthew Welling的作品的快速而肮脏的例子(它是一个更新的,更正版本,显示立体左/右视频)。
https://github.com/Zanfas/Cardboard_VideoPlayer
首先是坏消息:你必须学习Open GL ES和3D场景管理。 Google VR SDK不进行任何渲染工作(除非您使用VrPanoWidget或VrVideoView,但它们只进行360°渲染,如果您只想显示不打算以360°显示的视频或图像,则会很糟糕)。
我们的想法是在SurfaceTexture中绘制视频或图像,在放置在3D场景中的某个虚拟屏幕中显示此纹理(或根据您渲染的眼睛显示左侧部分或右侧部分)。您可以渲染3D场景(使用查看此虚拟屏幕的相机),然后Google VR SDK后期处理此渲染以应用扭曲。
拥有良好的沉浸式渲染的技巧是使虚拟屏幕填满用户的所有视野(您只需要看全屏。不多也不少)。为了达到这个目的,在这个例子中,您只需要使用虚拟屏幕的大小以及将屏幕远离相机的距离。
问候