回 帖 发 新 帖 刷新版面

主题:[原创]读取ms3d格式的三维模型,含动画显示

版块缺人气,发点东东顶一下。

最近发现一个好软件,Milkshape 3D,用于制作三维模型,支持骨骼动画。这个软件最强大的地方就在于,可以从格式的模型文件中导入。而且与3DS MAX等专业3D建模软件不同,它所支持的格式很多都是来自各种游戏的。雷神之锤、半条命、魔兽争霸3等等游戏所使用的格式,这个软件都可以直接读取(不过不是100%兼容,比如魔兽争霸3的mdx格式,读取后就只有模型没有关节和动画)。这一点为游戏开发提供了少许方便。导入后可以保存成软件自己的ms3d格式。

软件不是免费的,但是可以免费用一段时间。至于如何弄到注册码,呵呵,别问我。

网上也有一些文章讲如何读取ms3d格式的文件,但是很多资料(包括NEHE的OpenGL教程)都只讲了如何把数据读取出来并显示到屏幕上,而没有说明如何让模型动起来。比如人走路时四肢的相对位置会发生变化,箱子可以被打开,这些动作是如何完成的,很少有文章写。

我在恶补了一段线性代数(主要是矩阵运算)后,还翻阅了一些资料,也参照了开源游戏引擎irrlicht的少部分源代码,最后还靠了一点点运气,终于让我实现了模型动画中最关键的部分,也就是骨骼动画。

代码使用C语言编写,编译环境为VC2005。附带了一个treasure.ms3d文件作为测试用。

回复列表 (共12个回复)

沙发

放点图。
[img]http://blog.programfan.com/upfile/200805/20080526182714.jpg[/img][img]http://blog.programfan.com/upfile/200805/20080526182729.jpg[/img]
[img]http://blog.programfan.com/upfile/200805/20080526182724.jpg[/img][img]http://blog.programfan.com/upfile/200805/20080526182736.jpg[/img]

这个是先用MpqMaster从魔兽争霸3的war3.mpq文件中解压出模型(mdx格式)和纹理(blp格式),然后用Milkshape 3D转化为ms3d格式的模型和bmp格式的纹理。转化后箱子只有形状没有动画。我在Milkshape 3D软件中为它制作了骨骼关节,并加上动画。
最后显示出来就是图中这个样子,箱子逐渐的打开。
画面有点暗。因为我用了光照效果,而且光源调得不是很好。呵呵。意思一下吧。咱是搞技术的,美术细胞有点不足。

板凳

哈哈哈,牛奶3D确实功能很强大,在官网上就有现成的载入MS3D并渲染的代码,是用OPENGL做的,我以前把它改成DX的了,右手坐标系换成左手,好麻烦啊。

3 楼

我也听说DX是左手系的。

DX的纹理坐标也和OpenGL不同。我在上面的程序中使用了
glTexCoord2f(pTriangle->s[k], 1.0f - pTriangle->t[k]);
这样的写法。
不过这个应该也可以通过纹理坐标的矩阵变换来实现的。我没有具体的做过。

4 楼

DX是先把纹理坐标存入顶点缓冲再渲染的,如果一个点,同时被几个纹理坐标不同的三角形使用,怎么办呢?两种方法,一是分裂顶点,二是用多组纹理坐标,看哪个占空间少就用哪个啦。

5 楼

OpenGL也有顶点缓冲,不过到OpenGL 1.5版本时才正式纳入标准,之前则以ARB扩展的形式存在,
扩展名为GL_ARB_vertex_buffer_object。当然现在市面上所有显卡,包括集成显卡,都是支持这个扩展的。

最初OpenGL主要使用“立即模式”来绘制图形,就是使用glBegin/glEnd,当时唯一的加速方式就是使用显示列表。后来很快就有了顶点数组,并逐渐发展成为顶点缓冲。现在的OpenGL比较臃肿,同时支持这些功能。

OpenGL ES(OpenGL嵌入式版)就去掉了原来的立即模式,仅使用顶点缓冲了。计划在2007年10月完成的OpenGL 3.0标准到现在还迟迟没有推出,但传闻指出它将对原来臃肿的API进行一次大清理。届时也会去掉立即模式,仅使用顶点缓冲。不过OpenGL 3.0距离我们还很遥远。

开始的时候OpenGL的缓冲只用于保存顶点数据,后来缓冲也可以保存像素数据(直到最新的OpenGL 2.1才纳入标准,不过从OpenGL 1.5开始就以ARB扩展的形式存在,扩展名为GL_ARB_pixel_buffer_object)。可惜intel系列的集成显卡不支持这个扩展,一般用pbuffer代替。

6 楼

呵呵,我看的是《OPENGL编程指南》原书第五版,我对GL不熟练啊,以后多多请教你了,嘿嘿

7 楼

想请问 骨骼是如何绑定的呢? 在设置动画的时候 要怎么设置关键桢呢/

8 楼

先用joint工具在模型上依次设置关节点,关节点其实就是骨骼。然后用select->vertex工具,先在joint选项卡中选一个关节,然后在模型中选定相应的点,然后点击joint选项卡中的asigned 就把点绑到对应的关节上了。

编辑动画帧:首先进入动画模式,按左下角的admin按钮,然后用select->joint工具,选定相应关节,然后用rotate工具对关节旋转,转后好,按Ctrl+K 就设定关健帧了

牛奶3D选取骨骼时非常麻烦,有时候选不到还要转动整个模型。。。。。。。

9 楼


非常感谢!

牛奶选取点的时候真的好难弄 T0T 

俺刚开始用 绑定骨骼的时候顶点老是选不全  [em10]

10 楼

还想问一个问题 

用milkshape输出md2模型需要md2.qc  

这个md2.qc有什么作用? 

应该如何编辑呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册