使用带有Blender的java库

使用带有Blender的java库,java,python,blender,Java,Python,Blender,我正在开发一个用Java编写的小型3D引擎。Java主要用于可移植性(桌面和android)和可用库。Blender提供用于设计标高的工具 我希望使用相同的java库导出和加载自定义数据 如何混合Blender、Python和Java 我考虑过和Jython,但这是非常实验性的 谢谢 PS:有人已经使用Blender了吗?Blender+Java: 如果你说的是创建一个场景,然后加载.blend文件,那不是一个好方法。您可能希望将级别/角色/等导出为其他内容。我以前使用过openGL和java。

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

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

如何混合Blender、Python和Java

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

谢谢

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

Blender+Java:

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

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

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

正如我前面提到的,如果没有双方都能轻松读取的文件类型,直接混合blender和java是很困难的。混合文件不容易被java读取

Java+Python:

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

就我个人而言,我发现easer可以使用预先制作的java命令创建游戏控制台。我有一些简单的文本文件,可以调用控制台的命令来编写脚本。脚本可以定义ai移动和资源加载等内容

我很难找到一组强有力的理由将类似脚本的引擎(您可能会用python编写代码)合并到游戏引擎中。我承认这并不是我经常合作的发动机开发领域。我觉得不管怎样,它都只是调用java类的命令(或方法)。也许有人能为我们两人澄清python在游戏引擎中的更强大用途

最后,我推荐javaScript而不是python。Python是因为它的流行性而使用的,因为大多数引擎都是用C++或C语言编码的。与java不同,这些语言没有脚本“小兄弟”。如果您打算让它成为一个真正的java引擎,那么在选择脚本语言时使用JS会容易得多,因为使用JS的库已经和JDK打包在一起了


希望这能有所帮助。

那么,我得到的是,您希望同时构建和读取自己的文件类型?也许是基于XML的?只有通过python才能将自己的库合并到blender中。我知道人们已经为blender(包括动画导出器)构建了python扩展和插件

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

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


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

嗯?将Blender移植到Java有什么意义?我不是想将Blender移植到Java,而是想将Blender和Java库粘合在一起。我认为您应该编写一个Python脚本,以Java所需的格式导出所需的数据。Python实际上是一种非常好的语言,而且很容易学习。我每天都使用Python,但是如果我停止使用Blender,我想继续使用导出库,重写整个过程的成本很高。如果我可以使用唯一的库导出和加载数据,测试也会更简单。不,我不想加载混合文件。但是使用java库导出的文件(我引擎的一部分)。实际上,我使用XML和相关的Java工具。你知道如何使用Blender中的Jython吗?我发布了一个新的答案。我已经构建了一个库,现在我想将它集成到Blender中。分享或出售引擎并不重要。我不确定这是否可能。根据我的经验,搅拌机不是这样构造的。