如何在JavaFX中使用OpenGL?
我想写一个非常简单的Java 3D编辑器(用于实验)。我知道JavaFX的基本用法,我知道足够的OpenGL知识。但我所有的 OpenGL 经验都来自于使用 C/C++。
我可以在JavaFx应用程序中制作一个“画布”并在其上映射OpenGL视口吗?
我想写一个非常简单的Java 3D编辑器(用于实验)。我知道JavaFX的基本用法,我知道足够的OpenGL知识。但我所有的 OpenGL 经验都来自于使用 C/C++。
我可以在JavaFx应用程序中制作一个“画布”并在其上映射OpenGL视口吗?
在内部,JavaFX可以使用OpenGL作为渲染管道,因此需要注意两者之间的集成以避免冲突。
OpenGLNode in JavaFX
JavaFX团队负责人Richard Bair在openjfx开发邮件列表上发帖:
我希望看到8更新的一件事(例如)是拥有OpenGLNode或NativeSurfaceNode或类似的东西,这样如果你正在做自己的D3D / OpenGL,你可以有办法将这些原始命令发送到显卡,但仍然在场景图中合成你的节点。
因此,未来的JavaFX版本更新可能包括OpenGLNode。这样的功能可能不会包含在JavaFX的正式发布中,直到最初的Java 8版本之后的下一个JavaFX功能版本(我的猜测是,这将在2014年9月左右)。
第三方 OpenGL/JavaFX 集成
你不需要等待这么长时间就可以开始集成JavaFX和OpenGL。启动实现所需的所有源代码都在OpenJFX存储库中打开,因此您可以尝试使用lwjgl或jogl等库构建该代码的自定义集成。
随着开发人员开始执行 JavaFX 与 OpenGL api 的现有 Java 包装器的集成,这个答案将过时。一些开发人员已经开始这样的工作 - 运行谷歌搜索或查找当前的集成项目及其状态。lwjgl javafx
jogl javafx
最简单的集成可能是将第三方库渲染到屏幕外缓冲区,然后将像素从缓冲区传输到JavaFX WritableImage或Canvas,以便将OpenGL渲染的图形合成到JavaFX场景图中。
JavaFX 3D API Alternative
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 查看器项目,您可以对其进行分叉,为建议的基于 JavaFX 的 3D 编辑器创建基础。
Nashorn JavaScript引擎有一个开关,允许您使用JavaFX及其来自JavaScript的3D功能,因此如果您愿意,可以使用其他jvm语言来访问JavaFX 3D功能。