我正在用 JOGL 编写游戏,需要代表游戏中的角色。我计划对角色动作使用骨骼动画,当然角色也会被蒙皮。我似乎找不到任何好的 JOGL 模型加载器,所以我计划根据规范或其他内容自己加载文件类型。我还计划使用 Blender 作为我的 3D 建模器,因此其中存在的某种类型将是最好的。

您建议我使用什么文件类型?。混合?.x、.3ds、.md2/3/5、...??请记住,我想要具有明确定义格式的东西,以便我可以编写加载程序而不必对某些随机文件格式进行反混淆,并且它需要支持上述功能。您可以提供的有关为什么选择它以及为什么它最好的任何其他信息也会非常有帮助!

谢谢!

编辑:我将编写一个 Blender MS3D 导出​​器。当我完成后我会发布它 这里.

同时,请参阅下面我标记的答案;但此后发生了更多的事情。我不会根据我正在做的事情来更新它,但基本上我找到了 jMonkey Engine,它已经有一个 ms3d 导入器和我已经开始手写的其他子系统。尽管有场景图的东西(这就是我避免使用 Java3D 的原因),我认为与它联手将是我最好的选择,所以这就是我要做的。

有帮助吗?

解决方案 2

首先感谢另外两位答主。另外 basszero 你对混合文件的看法是正确的,我应该先检查一下维基百科!它是 Blender 内存中几乎无用的二进制转储。

写完这个问题后不久,我决定继续编写一个 OBJ 加载器,因为 1)它会给我加载 3D 文件格式的体验,2)它看起来是一种很好的常用格式,但也很容易加载。这最终是一个伟大的决定,因为它让我意识到,我实际上并不知道物体和群体之间的区别,而且我对材料也不太了解。它帮助我建立了这些 3D 结构的代码。

这两个答案都推荐基于 XML 的格式。我不需要 XML 格式。我认为这不是 XML 的正确位置。我相信创建这些格式是因为 XML 灵活、通用且易于创建架构,但这不是我想要的。我想要一种加载速度快的格式(相对而言,XML 不是),它不必灵活或人类可读,并且我可以为其编写导入器,而不是依赖 XML 库。basszero 甚至说,“以 XML 为代价”,他是完全正确的;我觉得这个成本不值得承担。

我的 OBJ 加载器完成了。我将它与实际的模型类分开,并使用 MeshFactory 接口实现它,以便将来我可以根据需要编写不同的加载器......这就是计划。过去几天我做了更多研究并决定使用 ms3d 格式。

ms3d 格式支持骨骼绑定(关节)和关键帧骨骼动画,并且还支持纹理贴图和 Alpha 贴图。此外,它是一种易于计算机读取的二进制格式,不会浪费人类可读的标签和标签等空间(像 XML 和 OBJ 那样)。

不幸的是,Blender 没有(工作的)ms3d 导出脚本,因此我将自己为其编写一个脚本。幸运的是,这不是一个困难的过程,您可以阅读 Blender 的文档并使用其他导出器作为示例。我必须温习一下我的 Python,但从我对其他脚本的了解来看,它似乎非常简单。

Java 方面的事情应该很容易,事实上它比 OBJ 格式更容易,因为 ms3d 更加结构化。我发现 规格 在线 ms3d 格式,采用 C 风格(天才!),因此它们非常不言自明,我对该格式没有进一步的疑问。我将根据这个规范来实现我的实现,尽管我稍后可能会实现我自己的变体;这就是编写自己的导入器和导出器的好处,我可以根据需要修改格式。

总而言之,我决定这是最好的解决方案。

basszero,你是绝对正确的,正如我从我的 OBJ 加载器中看到的那样:“一旦你读完了所有内容,数据的组织(显示列表、纹理、顶点数组、顶点缓冲区等)和渲染就完全不同了。”

克鲁坎:我不喜欢 Java3D,我坚持使用 JOGL。我确实拥有那本书(尽管目前无法访问),虽然我不记得他是如何加载模型的,但我很确定他使用了自动执行此操作的 Java3D 格式加载器。不是我打算使用的东西...对不起!

-佝偻病

其他提示

如果你可以只用几何居住,或准备处理自己的纹理,然后.OBJ可能是最直接,最广泛支持的3D文件格式。它基本上是3D建模的ASCII。

否则,我趋向VRML。它明确界定,并有周围至少有一些代码,让你开始。我一直在使用免费提供的代码加载成功VRML模型到Java3D的。机文件大小变大的倾向,但是这可以通过使用压缩格式来解决。

我不会推荐.3DS。我已经办理了读者此格式的唯一的一次是在Delphi Pascal和它的混乱,边界不清,难于处理,并往往有很多的“变化”这样,虽然我设法从出口我的读者的处理模式3D-MAX本身就好了它拒绝了来自自称是3DS格式,但并没有形成正确其他包很多车型。

增加:另外我建议你看一看的Java3D的API和O'Reilly本书的杀手游戏用Java编程的作为,即使你不下去的Java3D的路线很可能回答了很多的问题。

我相信.blend主要是在内存中构造一个二进制转储从搅拌机,不是要去帮助你多少外搅拌器。使用搅拌机,以模型,但出口到一个不同的格式。

这可能是一个有点冗长,但我听说的Collada非常漂亮的包装了3D信息(在被XML的成本)。有利的一面是,有可能是一个属性格式模式定义,您可以通过产生一个完整的解析器JAXB瓦特/没有从你的工作。

在.MD *格式也可以是一个很好的选择。他们对来自ID引擎(Q1,Q2,Q3,Q4,DOOM3)是和他们记录在案。它们还含有动画序列。

一旦获得所有读入,数据(显示列表,纹理,顶点数组,顶点缓冲器等)和渲染的组织是一个完全不同的野兽。

哇,老兄,你打算当你完成它释放MS3D出口国?如果是的话,它怎么来了?我真的需要得到我的手,对动画和Fragmotion使用作品的出口国,它看起来像你这样做是我最后的希望。

有是一种开源.blend文件阅读器,可以提取从.blend文件,包括网格,纹理,骨骼和动画的任何信息。

请参阅使用食人魔和Irrlicht的这里的一些例子: http://gamekit.googlecode.com

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top