中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 4402|回复: 0

3dmax导出插件关于材质动画的导出

[复制链接]
发表于 2012-12-13 00:34:05 | 显示全部楼层 |阅读模式
http://www.cppblog.com/GoodNight/archive/2010/06/14/117833.html

最近由于工作需要,开始深入的研究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->ASS的概念,而是直接使用了PASS,主要是因为那样的框架比较复杂,而且也并不是那么的实用...而且我这里没有用到多PASS,那样的结构实在是又不实用又麻烦,因为个人认为做多PASS还是直接用SHADER吧....

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

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

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

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

StdMat:标准材质类,哈哈,在SDK中查找这个类的接口后,你就发现
virtual [url=mkMSITStore:\%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99\3dsmax9sdkhelp_chm\help\3dsMax9SdkHelp.chm::/ref/main/html/class_color.html]Color[/url] StdMat::GetDiffuse( [url=mkMSITStore:\%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99\3dsmax9sdkhelp_chm\help\3dsMax9SdkHelp.chm::/ref/main/html/maxtypes_8h.html#a13]TimeValue[/url] t )
之类的好东西了,材质动画的入口我们已经找到了...你会说,纹理呢?纹理在哪儿??不要急...且听下回分解!

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

P.S. 由于代码还没写完!暂时没图!哈哈哈!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-10-19 22:24 , Processed in 0.849214 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表