GoodNight

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 2 Stories :: 16 Comments :: 0 Trackbacks

常用链接

留言簿(2)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

最近由于工作需要,开始深入的研究MAX导出插件,在此做一点学习笔记和大家分享交流....

其实MAX的SDK说大也大,说小也小.....虽然说MAX那么多类那么多接口,但实际上如果是开发导出插件的话.....至少有70%以上的DLLEXPORT类都是用不上的.....而在这些用的上的类里面,Set一族函数也是没有用的.....虽然说网上的资料很少,只要耐心的啃SDKHELP,基本上还是可以满足自己的功能的.....在此提一些之前学习MAXSDK中的一些经验和教训..

1.MAX中的坐标系和DX不一样,需要交换Y和Z..

2.MAX中FACE的索引顺序和DX中的索引顺序是相反的...

3.MAX中遍历整个模型必须是通过面的遍历,首先获取每个"面"中的每个顶点的索引,以及每个"纹理面"中的每个纹理顶点的索引,然后你可以通过一个MAP表来建立关系,然后再通过MESH中的GETVERT和GETTVERT来传入"面"和"纹理面"的索引,来获取顶点坐标和纹理坐标,至于你要说,如果遇到一个顶点对应了多个纹理坐标怎么办...那只有在程序中手动的去把这个顶点拆成两个顶点,并且自己去添加索引序号...

好了,接下来到重点了...关于材质动画的导出

这里还是描述一下我这里所谓的材质的概念...基本上和OGRE的材质的概念差不多...但这里我所导出的实质上就是MATERIAL中的一个PASS...主要因为在我的FUNK引擎中并没有用到MATERIAL->TECH->PASS的概念,而是直接使用了PASS,主要是因为那样的框架比较复杂,而且也并不是那么的实用...而且我这里没有用到多PASS,那样的结构实在是又不实用又麻烦,因为个人认为做多PASS还是直接用SHADER吧....

我们要实现的目标就是导出每帧(我没有做关键帧)的纹理坐标,漫反射材质,镜面光材质,ALPHA信息

提供一些我编码中的一些接口供大家参考...

MtlBase:基础材质类,这个类中可能没有你需要导出数据的接口,但是,贴图类,材质类,标准材质类等都是从这个类中派生出来的...

Mtl:材质类,如果你是一个对敏感的图形程序员,你就会发现这里有你需要的接口了,类似GetAmbient,GetDiffuse之类的接口,没错,你的猜测没错,这里就可以导出环境光,漫反射光之类的数据了...但是这远远不够,我们需要的是动画啊,在GetAmbient的参数里面没有看到TimeValue,不要急,往下面看...

StdMat:标准材质类,哈哈,在SDK中查找这个类的接口后,你就发现
virtual Color StdMat::GetDiffuse TimeValue  t  )
之类的好东西了,材质动画的入口我们已经找到了...你会说,纹理呢?纹理在哪儿??不要急...且听下回分解!

哎...累啊!明天还要加班!哥先去睡咯!

P.S. 由于代码还没写完!暂时没图!哈哈哈!
posted on 2010-06-14 00:20 G++ 阅读(2722) 评论(2)  编辑 收藏 引用

Feedback

# re: 3dmax导出插件关于材质动画的导出 2010-06-14 09:47 Bill Hsu
LZ沒用3dxi接口?  回复  更多评论
  

# re: 3dmax导出插件关于材质动画的导出[未登录] 2010-06-14 13:25 g++
@Bill Hsu
嗯~~!没有哈。。。IGAME资料挺少  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理