java - 如何在 Android 的 GvrView 中显示二维图像?

标签 java android image opengl-es google-vr

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

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

  • 要么使用 VR 全景 View ,这似乎是显而易见的解决方案,因为它是为显示 3D 图像而创建的。然而,不幸的是,它需要 360 度全景。因此,它将给定的纹理应用于 360 度光球,这样您只能看到图像的一小部分。另外,上面、下面和后面的合并点看起来很奇怪。
  • 我现在考虑的另一个选项是在 GvrActivity 中使用 GvrView。 GvrView 使用 GvrView.StereoRenderer 来显示其内容。这看起来与普通的 GLSurfaceView 非常相似,它使您能够使用 GLSurfaceView.Renderer 显示 OpenGL 内容。但是,虽然我设法使用 setBackgroundResource() 在 GLSurfaceView 中设置了一个背景图像,但如果我调用相同的方法,GvrView 中的背景仍然是黑色。

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

或者如果情况并非如此:最好的方法是将图像绘制到正方形上并使其占据整个视野吗?还是我应该首先自己做失真?如果是这样,您知道执行此操作的好方法吗?

如果你有什么想法,请回答。非常感谢您!

斯科伊布加

最佳答案

我在立体视频方面遇到了同样的问题,几天前我找到了解决方案。

快速回答您的问题:是的,您可以使用 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 对该渲染进行后期处理以应用失真。

获得良好的沉浸式渲染的诀窍是让虚拟屏幕充满用户的所有视野(您必须只看到全屏。不多也不少)。为了实现这一点,在这个示例中,您只需调整虚拟屏幕的大小以及屏幕与相机的距离即可。

问候

关于java - 如何在 Android 的 GvrView 中显示二维图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202924/

相关文章:

php - 使用 php 从多个 mysql 表中获取图像

c# - 在 System.Windows.Controls.Image 控件中显示 System.Drawing.Bitmap 对象

java - 是否需要从应用程序的 main 方法切换到 Swing 线程?

java - 这个构造函数有什么问题

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

android-manifest - 仅适用于平板电脑的应用程序

java - hibernate 避免数据库中的重复项

android - Android 中的 GMSGeometryLength

android - Google Play 控制台崩溃报告 java.lang.OutOfMemoryError

css - 什么 CSS 规则可以在不切断的情况下显示背景图像?