【问题标题】:JavaFX GUI, easiest way for complex 3D GraphicsJavaFX GUI,复杂 3D 图形的最简单方法
【发布时间】:2014-12-27 21:44:20
【问题描述】:

我正在创建一个使用 Swing 和 OpenGL(使用 JOGL)计算变速箱零件的软件。 使用该软件,计算出的零件以 3D 形式显示。下图为示例部分:

首先指定/计算几何形状(尖端/根部直径、宽度、齿数...),然后根据这些数据创建 3D 零件。这个示例部分是用 JOGL-Code 制作的,因为它对我来说很容易使用并且可以集成到 Swing-GUI 中。

现在玩了一下 JavaFX 应用程序 GUI,并决定继续使用 JavaFX 制作我的软件,因为它提供了我需要的一切,看起来更好等等。问题是我不能使用我的 JOGL-OpenGL 图形。

以下是我的可能性:

  • 寻找一种将 OpenGL 图形集成到 JavaFX 应用程序中的方法 - 但我用 Google 搜索了一下,这似乎相当困难,而且可能的解决方案似乎很慢。
  • 使用 JavaFX 集成 3D 图形 (TriangleMesh) - 但这很难理解,我找不到好的示例来学习它。
  • 还有其他解决方案吗?

您能帮我找到一个好的解决方案吗?你会怎么办?我最喜欢的是继续使用 OpenGL,但是有什么好的解决方案吗?

【问题讨论】:

  • 你试过我的多个建议了吗? jogamp.org/bugzilla/show_bug.cgi?id=607 您可能会遇到一些性能问题,但这也取决于您的网格的复杂性。
  • 我理解您对 TriangleMesh 的不满和担忧。我花了一段时间才“舒服”起来。我对 openGL 所做的不多,但归结起来的网格结构非常相似。点(顶点)、TexCoords(uv)和面(三角形)。转换它们应该相当简单。
  • @goussej:感谢您的链接
    @jdub 是否有任何好的文档或教程?我有一些例子,但无法理解 TexCoords 和 Faces 是什么以及如何计算正确的值。我应该从哪里开始?
  • 看起来 Jose 在下面的 cmets 中照顾了你...

标签: swing opengl javafx jogl javafx-3d


【解决方案1】:

如果您正在寻找一些 JavaFX 3D 资源来帮助您确定其是否已经成熟,这些资源是可用的,除其他外:

  • 3DViewer here 来自 OpenFJX 项目。
  • InteractiveMesh importersbrowser
  • F(X)yz,一个新的 JavaFX 3D 库,提供基本 JavaFX 8 3D 包所没有的附加原语、复合对象、控件和数据可视化。
  • Multimodel3DFX,存储库包含文章“在天空中建造城堡。使用 JavaFX 3D 对历史宝藏进行建模”中显示的示例代码,该文章发表于 Oracle Java 杂志,2014 年 11 月/12 月发行。

使用 F(X)yz 的 PolyLine3D 和 Multimodel3DFX 平台,我能够挤出正齿轮的 2D 折线,因此您可以看到它在 JavaFX 3D 子场景中的渲染方式:

这些也是使用 F(X)yz 库生成的数学 3D 模型,均基于 TriangleMesh

如您所见,JavaFX 3D API 各有利弊,可以轻松扩展以实现复杂任务。

【讨论】:

  • 哇——这看起来很有希望。非常感谢你的帮助。我已经下载了 F(X)yz 并查看了所有示例。我还从您那里下载了 Multimodel3DFX,但是我在哪里可以运行应用程序来查看您描述的城堡?以及如何挤出 Polyline3D?您图片中的正齿轮看起来非常非常漂亮。
  • 谢谢,在 F(x)yz 中,您会(在代码中)找到足够的信息来帮助您开始使用任何 TriangleMesh。但是,如果您向我们提供有关您的形状的一些详细信息,您可以提出功能请求,我们可以添加一些示例齿轮,例如我的答案中显示的齿轮。 Multimodel3DFX项目有一个小模型要测试,大的没有。
  • 我已经了解了如何拉伸折线(宽度在构造函数中)以及如何启动 Multimodel3DFX 的模型(NavigationFX.java)。这足以玩几个小时:-) 但还有一个问题 - 在 OpenGL 中,我必须指定三角形的坐标和垂直于该三角形的矢量(来自三角形的两个矢量的叉积)以进行照明。但它在 JavaFX-3D 中如何?在我的示例中,我没有看到几何点和面/纹理值之间有任何联系。我在哪里可以找到一个很好的解释?
  • 现在,您只需要顶点坐标、纹理坐标和面(顶点和纹理的索引列表)。法线不是必需的,但它们可用于计算平滑组。正如我所说,在 F(X)yz org.fxyz.shapes.primitives 包中,您会找到足够的示例来帮助您入门。顺便说一句,如果您认为这是一个有效的答案,请将其标记为已接受,以便其他人也能发现它有用。
猜你喜欢
  • 1970-01-01
  • 2015-08-03
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2019-10-15
  • 1970-01-01
相关资源
最近更新 更多