如何在Android上的GvrView中显示2D图像?

问题描述 投票:2回答:1

我目前正在使用Android应用程序来使用VR显示3D图片。每张3D图片都包含两个从略微不同的视角拍摄的图像:一个用于右眼,一个用于左眼。现在我需要将它们并排显示并应用失真校正。虽然并排部分应该很容易实现,但失真校正是另一回事。

查看VR失真校正的明显库是Google VR SDK。但是,我无法真正找到我需要的功能。显然,有两种方法可以在Google VR SDK中显示3D内容:

  • 您可以使用VR全景视图,这可能看起来是显而易见的解决方案,因为它是为显示3D图像而创建的。然而,遗憾的是它需要360度全景。因此,它将给定的纹理应用于360度光球,这样您只能看到图像的一小部分。此外,上方,下方和后方的合并点看起来非常奇怪。
  • 我现在要看的另一个选项是在GvrActivity中使用GvrView。 GvrView使用GvrView.StereoRenderer来显示其内容。这看起来非常类似于普通的GLSurfaceView,它允许您使用GLSurfaceView.Renderer显示OpenGL内容。但是当我设法使用setBackgroundResource()在GLSurfaceView中设置背景图像时,如果我调用相同的方法,GvrView中的背景将保持黑色。

现在我的问题是:有没有办法在GvrView中显示2D图片(有或没有GvrView.StereoRenderer)?

或者如果不是这样的话:最好的方法是将图像绘制到正方形上并使其占据整个视野吗?或者我应该首先自己做扭曲?如果是这样,你知道一个很好的方法吗?

如果您有任何想法,请回答。非常感谢你提前!

Skoebuga

java android image opengl-es google-vr
1个回答
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后期处理此渲染以应用扭曲。

拥有良好的沉浸式渲染的技巧是使虚拟屏幕填满用户的所有视野(您只需要看全屏。不多也不少)。为了达到这个目的,在这个例子中,您只需要使用虚拟屏幕的大小以及将屏幕远离相机的距离。

问候

© www.soinside.com 2019 - 2024. All rights reserved.