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

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

有帮助吗?

解决方案

Android 支持 OpenGL ES 1.0,它与 OpenGL 1.3 重叠,因此这应该是可能的,但它并不像在运行时替换 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 有关配置文件的更多信息。

其他提示

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

java3d和android opengl api之间确实存在很大差异。第一个java3d是3d上的更高级抽象。即使你使用像JOGL这样的东西,api也会有一些不同之处。你最好的选择是在代码库中抽象出实际的3D绘图实现,你可以共享其余的逻辑,但是然后有特定于平台的代码来处理opengl / 3d绘图。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top