【问题标题】:Writing a portable Java application using JOGL and Android OpenGL使用 JOGL 和 Android OpenGL 编写可移植的 Java 应用程序
【发布时间】:2009-10-24 09:53:05
【问题描述】:

我计划编写一个可在 PC 和 Android 上运行的 Java 3D 游戏。不幸的是,这两个平台似乎没有通用的 OpenGL API。

API 是否有显着差异?有没有办法可以在两个版本中使用相同的 3D 代码?这是个好主意吗?

【问题讨论】:

  • 好问题 - 移动平台上的可移植性仍然不现实。
  • 尝试使用 Qt。它是跨平台的,适用于 Windows、Mac OSX、Linux、iOS、Android、BlackBerry、Windows RT 和(很快)Windows Phone。它提供了在所有平台上兼容的最小 OpenGL 函数集,但您也可以使用特定于每个平台的 OpenGL 函数(例如桌面上的完整 OpenGL)。

标签: java android opengl opengl-es jogl


【解决方案1】:

Android 支持与 OpenGL 1.3 重叠的 OpenGL ES 1.0,所以这应该是可能的,但它并不像在运行时替换 jar 文件那么简单。

尝试在两个平台上尽可能多地重用您的应用程序是个好主意。 无论如何,即使您并不特别需要 OpenGL ES 支持,将其余代码与外部依赖项(例如 OpenGL)隔离开来通常是一种好习惯。您永远不知道将来您可能希望将应用程序移植到哪个 API/平台。

有 2 个选项可用。

第一个是将 OpenGL 实现隐藏在应用程序其余部分使用的接口后面,然后提供单独的 Jogl 和 Androide 实现。根据您运行的平台,您可以选择使用工厂模式在运行时实例化正确的实现。

由于 OpenGL ES 和 OpenGL 非常相似,只要您坚持常用功能,维护它所需的工作量不会太高。

另一种选择是尝试使用支持配置文件的 Jogl2。这些似乎可以提供您所需要的,但 Jogl2 仍处于测试阶段。

本页底部有一些关于个人资料的内容:http://kenai.com/projects/jogl/pages/FAQ

配置文件允许以允许同时兼容多个 OpenGL 版本的方式编写 Java 应用程序。由于 OpenGL ES(嵌入式系统的 GL)与 OpenGL 本身具有重叠的功能,因此它为添加连接桌面和嵌入式实现的配置文件提供了机会。

您可能想阅读此http://michael-bien.com/mbien/entry/jogl_2_opengl_profiles_explained 以了解有关个人资料的更多信息。

【讨论】:

  • 经过很好研究的答案。有一个不错的 OS JOGL 应用程序,叫做 worldwind,我正在开发它,我愿意花钱看它在 Android 上运行。
【解决方案2】:

项目已完成。事实证明,API 有所不同,但在功能上存在共享部分。我们最终编写了一个简单的预处理器,将 JOGL 代码转换为 ES 版本,并使用 Eclipse 自动转换。

【讨论】:

【解决方案3】:

由于几年前 JOGL-ES 并入 JOGL 2.x,您现在可以在桌面和移动环境 (Android) 中使用 JOGL。

【讨论】:

    【解决方案4】:

    java3d 和 android opengl api 之间实际上有很大的不同。首先 java3d 是对 3d 的更高层次的抽象。即使您要使用类似 JOGL 的东西,api 也会有一些差异。你最好的办法是在代码库中抽象出实际的 3d 绘图实现,你可以共享其余的逻辑,然后有平台特定的代码来处理 opengl/3d 绘图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多