我目前正在使用 Android 应用使用VR显示3D图片。每张3D图片都包含从稍微不同的视角拍摄的两张图片:一张用于右眼,一张用于左眼。现在我需要应用失真校正并排显示它们。虽然并排部分应该很容易实现,但失真校正是另一回事。
要研究VR失真校正的明显库是Google VR SDK。但是,我无法真正找到我需要的功能。显然,有两种方法可以在Google VR SDK中显示3D内容:
现在我的问题是:有没有办法在GvrView中显示2D图片(有或没有GvrView.StereoRenderer)?
或者如果不是这样的话:最好的方法是将图像绘制到正方形上并使其占据整个视野吗?或者我应该首先自己做扭曲?如果是这样,你知道一个很好的方法吗?
如果您有任何想法,请回答。非常感谢你提前!
Skoebuga
答案 0 :(得分:1)
我在立体视频方面遇到了同样的问题,几天前我找到了解决方案。
如此快速回答您的问题:是的,您可以使用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后期处理此渲染以应用扭曲。
获得良好的沉浸式渲染的技巧是使虚拟屏幕填满用户的所有视野(您只需要看到全屏幕。不多也不少)。为了达到这个目的,在这个例子中,您只需要玩虚拟屏幕的大小以及将屏幕远离相机的距离。
此致