如何在JavaFX中使用OpenGL?

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

我可以在JavaFx应用程序中创建一个“canvas”并在其上映射OpenGL视口吗?

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

JavaFX中的OpenGLNode

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

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

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

第三方OpenGL / JavaFX集成

您不需要等待这么长时间才能开始集成JavaFX和OpenGL。 启动实现所需的所有源代码都在OpenJFX存储库中打开,因此您可以尝试使用诸如lwjgl或jogl之类的库来构建该代码的自定义集成。

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

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

JavaFX 3D API替代方案

JavaFX拥有自己的轻量级3D api,可以将phong着色的3d模型合成到JavaFX场景图中。 JavaFX 3D api无法提供完整OpenGL api集成的所有function,但使用JavaFX 3D api相对简单。 使用Java 8中的3Dfunction的代码示例的描述在open-jfx wiki上 。

Interactive Mesh 为JavaFX提供了一个免费的3D模型导入器 ,它允许您非常简单地将复杂的着色和纹理3D模型带入JavaFX场景图。

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

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

是的,无论如何,您可以使用JOGL在C / C ++中有效地使用OpenGL实现Java中的所有function。