15

我想写一个非常简单的 Java 3D 编辑器(用于实验)。我知道基本的 JavaFX 用法,并且我知道足够的 OpenGL 知识。但我所有的 OpenGL 经验都来自使用 C/C++。

我可以在 JavaFx 应用程序中制作一个“画布”并在其上映射 OpenGL 视口吗?

4

3 回答 3

18

在内部,JavaFX 可以使用 OpenGL 作为渲染管道,因此需要注意两者之间的集成以避免冲突。

JavaFX中的OpenGLNode

JavaFX 团队负责人 Richard Bair 在openjfx 开发邮件列表上发帖:

我希望看到(例如)8 更新完成的一件事是拥有一个 OpenGLNode 或 NativeSurfaceNode 或类似的东西,这样如果你正在做自己的 D3D / OpenGL,你可以有一种方法将这些原始命令发送到图形卡,但仍将您的节点合成在场景图中。

因此,未来的 JavaFX 版本更新可能包括一个 OpenGLNode。在最初的 Java 8 发布之后的下一个 JavaFX 功能版本之前,这样的功能可能不会包含在 JavaFX 通用版本中(我的猜测是大约在 2014 年 9 月)。

第 3 方 OpenGL/JavaFX 集成

您无需等待很长时间即可开始集成 JavaFX 和 OpenGL。启动实现所需的所有源代码都在OpenJFX 存储库中打开,因此您可以尝试构建该代码与诸如lwjgljogl 之类的库的自定义集成。

随着开发人员开始执行 JavaFX 与 OpenGL api 的现有 Java 包装器的集成,这个答案将会过时。一些开发人员已经开始了这样的工作 - 运行谷歌搜索lwjgl javafxjogl javafx了解当前的集成项目及其状态。

最简单的集成可能是让第 3 方库渲染到屏幕外缓冲区,然后根据需要将像素从缓冲区传输到 JavaFX WritableImageCanvas,以将 OpenGL 渲染的图形合成到 JavaFX 场景图中。

JavaFX 3D API 替代方案

JavaFX 有自己的轻量级 3D api,它提供了将 phong 阴影 3d 模型合成到 JavaFX 场景图中的能力。JavaFX 3D api 不会提供完整的 OpenGL api 集成的所有功能,但是使用 JavaFX 3D api 相对简单。描述,带有代码示例带有Java 8 中 3D 功能的在 open-jfx wiki 上。

Interactive Mesh为 JavaFX提供免费的3D 模型导入器,它允许您非常简单地将复杂的阴影和纹理 3D 模型引入 JavaFX 场景图中。

openjfx 存储库中有一个3D Viewer 项目,您可以创建一个基于 JavaFX 的 3D 编辑器的基础。

nashorn JavaScript 引擎有一个开关,允许您从 JavaScript 使用 JavaFX 及其 3D 功能,因此如果您愿意,可以使用其他 jvm 语言来访问 JavaFX 3D 功能。

于 2013-06-05T21:07:52.613 回答
1

是的,无论如何,您可以使用JOGL有效地实现在 Java 中使用 OpenGL 可以实现的一切,就像在 C/C++ 中一样。

于 2013-06-05T17:17:14.323 回答
0

您可以使用混合了前面提到的 JOGL/LWJGL 和 JavaFX 的OpenGLFX库。该代码在不更改 JavaFX 本身的源代码的情况下具有可用的最佳性能。

于 2021-08-13T21:15:39.757 回答