2

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

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

如何混合 Blender、Python 和 Java?

我想到了BlenderJava和 Jython,但这是非常实验性的。

谢谢

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

4

2 回答 2

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 打包在一起。

希望这会有所帮助。

于 2013-08-07T15:52:57.217 回答
0

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

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

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

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

于 2013-08-08T15:02:56.063 回答