游戏角色模型的推荐3D模型类型,手动加载?

时间:2009-02-25 12:20:43

标签: 3d file-format jogl blender

我正在用JOGL写一个游戏,需要代表游戏中的角色。我计划使用骨骼动画进行角色动作,当然角色也会被剥皮。我似乎无法为JOGL找到任何好的模型加载器,所以我打算根据规格或其他东西自己加载文件类型。我还计划使用Blender作为我的3D建模器,因此存在于其中的某种类型将是最好的。

您建议我使用哪种文件类型? 。混合? .x,.3ds,.md2 / 3/5,......请记住,我喜欢具有明确定义格式的内容,这样我就可以编写加载程序而无需对某些随机文件格式进行反混淆处理,并且需要支持上述功能。您可以提供有关您选择它的原因以及为什么它最好的任何其他信息也非常有用!

谢谢!

编辑: 我将编写一个Blender MS3D导出器。当我完成后,我会发布here

同时,请看下面我的明确答案;但此后更多的事情发生了。我不打算用我正在做的更新这个,但基本上我找到了jMonkey Engine,它已经有一个ms3d导入器和其他子系统,我已经开始手写了。尽管有场景图(这就是我避免使用Java3D的原因),但我认为最好的选择就是与它合作,这就是我要做的事情。

5 个答案:

答案 0 :(得分:3)

如果您可以只使用几何体,或者准备好处理自己的纹理,那么.obj可能是最直接且广泛支持的3D文件格式。它基本上是3D建模的ascii。

否则我会倾向于vrml。它定义明确,至少有一些代码可以帮助您入门。我已经使用免费的代码成功地将vrml模型加载到java3D中。本机文件大小往往很大,但可以通过使用压缩格式来解决。

我不推荐.3ds。我为这种格式处理读者的唯一一次是在Delphi Pascal中,它很乱,定义不明确,难以处理,并且往往有很多“变化”,尽管我设法让我的读者处理从3D-MAX本身很好,它拒绝了其他声称采用3DS格式但未正确成型的软件包中的许多模型。

补充:另外我建议您查看Java3D API和O'Reilly书籍Killer Game Programming in Java,因为即使您没有沿着Java3D路线走下去它也可能会回答很多的问题。

答案 1 :(得分: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更加结构化。我在网上找到了specifications msnd格式,用C风格(天才!),所以它们非常不言自明,我对格式没有进一步的疑问。我将基于此规范实现我的实现,尽管我可能稍后实现我自己的变体;编写自己的导入程序和导出程序是件好事,我可以根据需要修改格式。

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

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

Cruachan:对我来说没有Java3D,我坚持使用JOGL。我确实拥有那本书(尽管目前无法访问)虽然我不记得他是如何加载模型的,但我很确定他使用了自动执行它的Java3D格式加载器。不是我打算用的东西......抱歉!

-Ricket

答案 2 :(得分:1)

我相信.blend主要是来自搅拌机的内存结构的二进制转储,在搅拌机之外不会帮助你。使用Blender进行建模,但导出为其他格式。

它可能有点冗长,但我听说Collada很好地包装了3D信息(以XML为代价)。好处是,可能存在一个可以通过JAXB传递的自适应模式定义,从而导致完整的解析器无需您的工作。

.md *格式也可能是一个不错的选择。它们来自iD引擎(q1,q2,q3,q4,doom3)并且它们被记录下来。它们还包含动画序列。

一旦你把它全部读入,数据的组织(显示列表,纹理,顶点数组,顶点缓冲等)和渲染是完全不同的野兽。

答案 3 :(得分:0)

哇,伙计,你完成后会释放ms3d导出器吗?如果是这样,它将如何发展?我真的需要得到一个适用于动画的导出器和Fragmotion使用的导出器,看起来你的行为是我最后的希望。

答案 4 :(得分:0)

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

在此处查看使用Ogre和Irrlicht的一些示例: http://gamekit.googlecode.com