我正在用JOGL写一个游戏,需要表现游戏中的角色。我计划使用骨骼动画的角色移动,当然角色将被蒙皮。我似乎找不到任何好的JOGL模型加载器,所以我计划自己加载文件类型,基于规范或其他什么。我还计划使用Blender作为我的3D建模器,所以其中存在的一些类型将是最好的。
您建议我使用哪种文件类型?.blend?.x、.3ds、.md2/3/5、...??请记住,我希望有一个明确定义的格式,这样我就可以编写加载程序,而不必去混淆一些随机的文件格式,并且它需要支持上述功能。你能给出的任何关于你为什么选择它以及为什么它是最好的信息也会非常有帮助!
谢谢!
编辑:我将编写一个搅拌机MS3D导出器。当我完成的时候,我会把它贴到here上。
同时,请看下面我标出的答案;但从那以后又发生了更多的事情。我不打算更新我正在做的事情,但基本上我找到了jMonkey引擎,它已经有了一个ms3d导入器和其他我已经开始手写的子系统。尽管有场景图之类的东西(这就是我避免使用Java3D的原因),但我认为这将是我最好的选择,与它联手,所以这就是我要做的。
发布于 2009-03-10 23:57:19
首先,感谢另外两位回答者。同样,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更加结构化。我在网上找到了C风格的ms3d格式的specifications (天才!)所以它们是令人难以置信的不言自明的,我没有更多关于格式的问题。我将在此规范的基础上实现我的实现,尽管稍后我可能会实现我自己的变体;这是编写我自己的导入器和导出器的伟大之处,我可以根据自己认为合适的方式修改格式。
总而言之,我认为这是最好的解决方案。
我从我的OBJ加载器中看到:“一旦你读入了所有内容,数据(显示列表、纹理、顶点数组、顶点缓冲区等)的组织和渲染就完全不同了。”
克鲁坎:我没有Java3D,我坚持使用JOGL。我确实拥有那本书(虽然现在还不能拿到),尽管我不记得他是如何加载模型的,但我很确定他使用的是自动加载的Java3D格式加载器。不是我打算用的东西...抱歉的!
-Ricket
发布于 2009-02-25 12:33:38
如果你可以只接受几何体,或者准备好处理你自己的纹理,那么.obj可能是最直接和最广泛支持的3D文件格式。它基本上是3D建模的ascii。
否则,我会倾向于使用vrml。它定义得很好,至少有一些代码可以让你入门。我已经使用免费的代码成功地将vrml模型加载到java3D中。原生文件大小往往很大,但这可以通过使用压缩格式来解决。
我不推荐使用.3ds。我唯一一次处理这种格式的阅读器是在Delphi Pascal中,它杂乱无章,定义不清,难以处理,而且往往有很多“变体”,尽管我设法让我的阅读器处理从3D-MAX本身导出的模型,但它拒绝了许多来自其他软件包的模型,这些模型声称是3DS格式,但格式不正确。
补充:另外,我建议您看看Java3D应用编程接口和O‘’Reilly一书中的Killer Game Programming in Java,因为即使您不走Java3D路线,它也可能回答您的许多问题。
发布于 2009-02-25 12:41:41
我相信.blend主要是blender在内存结构中的二进制转储,在blender之外帮不了你太多。使用Blender建模,但导出为不同的格式。
这可能有点冗长,但我听说Collada很好地包装了3D信息(以XML为代价)。好处是可能有一个适当的模式定义,您可以通过JAXB传递该定义,从而得到一个完整的解析器,而不需要您做任何工作。
.md*格式也可能是一个很好的选择。它们来自iD引擎(q1、q2、q3、q4、doom3),并且有文档记录。它们还包含动画序列。
一旦你读入了所有的内容,数据的组织(显示列表,纹理,顶点数组,顶点缓冲区等)和渲染是完全不同的。
https://stackoverflow.com/questions/585769
复制相似问题