【问题标题】:Using a java library with Blender在 Blender 中使用 java 库
【发布时间】:2013-08-08 12:04:18
【问题描述】:

我正在开发一个用 Java 编写的小型 3D 引擎。 Java 主要用于可移植性(桌面和安卓)和可用库。 Blender 提供了用于设计关卡的工具。

我希望使用相同的 java 库来导出和加载自定义数据。

如何混合使用 Blender、Python 和 Java?

我考虑过 BlenderJava 和 Jython,但这是非常实验性的。

谢谢

PS:有人已经在 Blender 中使用execnet 了吗?

【问题讨论】:

  • 呃?将 Blender 移植到 Java 有什么意义?
  • 我不想将搅拌机移植到 java,但我想将搅拌机和 java 库粘合起来。
  • 我认为你应该编写一个 Python 脚本,以你想要的 java 格式导出你想要的数据。 Python 实际上是一门非常好的语言,而且很容易上手。
  • 我每天都使用 Python,但如果我停止使用 Blender,我想继续使用导出库,重写整个东西的成本很高。如果我可以使用独特的库导出和加载数据,测试也会更简单。

标签: java python blender


【解决方案1】:

搅拌机 + Java:

好吧,如果您正在谈论创建场景然后加载 .blend 文件,那不是一个好方法。您可能希望将关卡/角色/等导出为其他内容。我以前使用过 openGL 和 java。我建议导出为 collada(.dae 文件)。 Collada 文件是基于 xml 的(使用 DOM 或 SAX 易于解析),并且不携带任何 gl 无论如何都无法使用的额外搅拌机数据。 Collada 文件支持动画帧、骨骼结构、光源、材质、纹理、颜色、法线和顶点。同样,由于它们是基于 XML 的文件,因此很容易使用文本编辑器打开它们并研究文件类型。由于 java 的库中已经有 XML 解析器,因此这种文件类型易于使用和阅读。它的数据几乎可以立即转储到 BufferObject 或立即渲染模式中。

Fbx 是另一种支持搅拌机所有元素的文件类型。这种类型的问题在于它同时具有二进制和文本格式。结构略有不同,因此很难找到描述二进制文件格式的资源。同样,它是一种受版权保护的文件类型。

Obj 文件是最容易阅读和使用的。但是,它们将纹理/材质数据存储在单独的外部文件中。同样,它们绝不支持动画。因此,出于多种原因,它们是一个糟糕的选择。但是,如果您有一个静态对象(一个盒子或一棵无生命的树),则此文件类型可能适合您。

正如我之前提到的,如果没有双方都易于读取的文件类型,很难直接混合 blender 和 java,.blend 文件不容易被 java 读取。

Java + Python:

这有点棘手。我认为 Jython 是一个很好的起点。 Python 可以与脚本类似地使用,至少在与引擎一起使用时是这样。您选择如何实施它完全取决于您。

就个人而言,我发现使用预制的 java 命令创建游戏控制台更容易。我有简单的文本文件,可以调用控制台的命令来编写脚本。脚本可以定义诸如人工智能运动和资源加载之类的东西。

我很难找到将类似脚本的引擎(您可能会用 Python 编写的代码)整合到游戏引擎中的一系列强有力的理由。我承认这不是我经常合作的引擎开发领域。无论哪种方式,我都觉得它只会调用您的 java 类的命令(或方法)。也许有人可以为我们俩澄清一下 python 在游戏引擎中的更强大用途。

最后,我会推荐 javaScript 而不是 python。使用 Python 是因为它很受欢迎,而且大多数引擎都是用 C++ 或 C# 编码的。与 java 不同,这些语言没有脚本“小弟”。如果你打算让它成为一个真正的 Java 引擎,那么使用 JS 作为你选择的脚本语言会容易得多,因为使用它的库已经与 JDK 一起打包。

希望这会有所帮助。

【讨论】:

  • 不,我不想加载混合文件。但是使用 java 库(我的引擎的一部分)导出的文件。实际上,我使用 XML 和相关的 Java 工具。
  • 你知道如何使用 Blender 中的 Jython 吗?
  • 我发布了一个新答案。
【解决方案2】:

那么,我得到的是您想要构建和读取自己的文件类型?也许是基于 XML 的?将您自己的库合并到搅拌机中的唯一方法是通过 python。我知道人们已经为 blender(包括动画导出器)构建了 python 扩展和插件。

人们通常只使用他们自己的文件类型和他们自己的工具(例如,如果您创建了一个像搅拌机这样的程序)。因为,假设有人喜欢使用不同的 3D 建模软件,他们将无法使用您的引擎。理想情况下,工具和渲染引擎的功能彼此独立。 Blender 已经可以导出几种提供更大灵活性的标准文件类型。

我不会创建一个库来导出自定义文件类型,除非您也制作自定义工具。它只会鼓励其他人使用不同的引擎,而不是你的。

顺便说一句,这个问题属于stackexchange而不是stackoverflow。

【讨论】:

  • 我已经建立了一个库,现在我想将它集成到搅拌机中。分享或出售引擎并不重要。
  • 我不确定这是否可能。根据我的经验,搅拌机的结构并非如此。
猜你喜欢
  • 2011-04-01
  • 2012-12-29
  • 2018-07-07
  • 2015-04-12
  • 2010-12-21
  • 2012-05-09
  • 2011-05-05
  • 2020-01-06
  • 2020-10-04
相关资源
最近更新 更多