我想写一个非常简单的Java 3D编辑器(用于实验)。我知道基本的JavaFX用法,我知道足够的OpenGL知识。但我所有的OpenGL经验都来自于使用C/C++。我可以在JavaFx应用程序中创建一个“画布”,并在上面MapOpenGL视口吗?
4bbkushb1#
在内部,JavaFX可以使用OpenGL作为渲染管道,因此需要注意两者之间的集成以避免冲突。
JavaFX中的OpenGLNode
JavaFX团队负责人Richard Bair在openjfx development mailing list上发布了以下内容:我希望看到的一件事(例如)8更新是有一个OpenGLNode或NativeSurfaceNode或类似的东西,这样如果你正在做自己的D3 D/ OpenGL,你可以有一种方法将这些原始命令发送到显卡,但仍然有你的节点合成在场景图中。因此,未来的JavaFX版本更新可能会包括OpenGLNode。这样的功能可能不会包含在JavaFX的一般可用性版本中,直到最初的Java 8版本之后的下一个JavaFX功能版本(我猜大约是2014年9月)。
第三方OpenGL/JavaFX集成
您不需要等待很长时间才能开始集成JavaFX和OpenGL。开始实现所需的所有源代码都在OpenJFX repository中开放,因此您可以尝试使用lwjgl或jogl等库构建该代码的自定义集成。随着开发人员开始将JavaFX与现有的OpenGL API的Java Package 器集成,这个答案将变得过时。一些开发人员已经开始了这样的工作-运行lwjgl javafx或jogl javafx的谷歌搜索以了解当前的集成项目及其状态。最简单的集成可能是让第三方库渲染到屏幕外缓冲区,然后根据需要将缓冲区中的像素传输到JavaFX WritableImage或Canvas,以将OpenGL渲染的图形合成到JavaFX场景图中。
lwjgl javafx
jogl javafx
JavaFX 3D API Alternative
JavaFX有自己的轻量级3D API,可以将phong着色的3D模型合成到JavaFX场景图中。JavaFX 3D api不会提供完整的OpenGL api集成的所有功能,但是使用JavaFX 3D api相对简单。一个描述,带有3D features in Java 8 is on the open-jfx wiki的代码示例。Interactive Mesh提供了一个免费的3D model importer for JavaFX,允许您非常简单地将复杂的着色和纹理3D模型带入JavaFX场景图中。在openjfx repository中有一个3D Viewer project,您可以派生它来为您提议的基于JavaFX的3D编辑器创建基础。nashorn JavaScript引擎有一个开关,允许您使用use JavaFX and its 3D features from JavaScript,因此如果您愿意,您可以使用替代的jvm语言来访问JavaFX 3D功能。
0yg35tkg2#
是的,无论如何,你可以使用JOGL来有效地实现你在Java和OpenGL中所能实现的一切,就像你在C/C++中所能实现的一样。
ut6juiuv3#
您可以使用OpenGLFX库,它混合了前面提到的JOGL/LWJGL和JavaFX。代码具有最佳性能,而无需更改JavaFX本身的源代码。
k3fezbri4#
DriftFX支持将任何OpenGL内容直接渲染到JavaFX节点中,直接表示GPU和主存之间没有传输,纹理永远不会离开GPU。
您可以在GitHub上访问该项目:DriftFX
4条答案
按热度按时间4bbkushb1#
在内部,JavaFX可以使用OpenGL作为渲染管道,因此需要注意两者之间的集成以避免冲突。
JavaFX中的OpenGLNode
JavaFX团队负责人Richard Bair在openjfx development mailing list上发布了以下内容:
我希望看到的一件事(例如)8更新是有一个OpenGLNode或NativeSurfaceNode或类似的东西,这样如果你正在做自己的D3 D/ OpenGL,你可以有一种方法将这些原始命令发送到显卡,但仍然有你的节点合成在场景图中。
因此,未来的JavaFX版本更新可能会包括OpenGLNode。这样的功能可能不会包含在JavaFX的一般可用性版本中,直到最初的Java 8版本之后的下一个JavaFX功能版本(我猜大约是2014年9月)。
第三方OpenGL/JavaFX集成
您不需要等待很长时间才能开始集成JavaFX和OpenGL。开始实现所需的所有源代码都在OpenJFX repository中开放,因此您可以尝试使用lwjgl或jogl等库构建该代码的自定义集成。
随着开发人员开始将JavaFX与现有的OpenGL API的Java Package 器集成,这个答案将变得过时。一些开发人员已经开始了这样的工作-运行
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相对简单。一个描述,带有3D features in Java 8 is on the open-jfx wiki的代码示例。
Interactive Mesh提供了一个免费的3D model importer for JavaFX,允许您非常简单地将复杂的着色和纹理3D模型带入JavaFX场景图中。
在openjfx repository中有一个3D Viewer project,您可以派生它来为您提议的基于JavaFX的3D编辑器创建基础。
nashorn JavaScript引擎有一个开关,允许您使用use JavaFX and its 3D features from JavaScript,因此如果您愿意,您可以使用替代的jvm语言来访问JavaFX 3D功能。
0yg35tkg2#
是的,无论如何,你可以使用JOGL来有效地实现你在Java和OpenGL中所能实现的一切,就像你在C/C++中所能实现的一样。
ut6juiuv3#
您可以使用OpenGLFX库,它混合了前面提到的JOGL/LWJGL和JavaFX。代码具有最佳性能,而无需更改JavaFX本身的源代码。
k3fezbri4#
DriftFX支持将任何OpenGL内容直接渲染到JavaFX节点中,直接表示GPU和主存之间没有传输,纹理永远不会离开GPU。
您可以在GitHub上访问该项目:DriftFX