游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2757|回复: 11

今天遇到件奇怪的事情,用同一个导出插件导出的两个模

[复制链接]

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2009-6-4 00:05:00 | 显示全部楼层 |阅读模式
今天遇到件奇怪的事情,用同一个导出插件导出的两个模型的Face的MaterialID不一样,在3DSMAX中设置的Material是同一个,为什么导出后Face的MaterialID不一样,一个正确,一个不正确,好怪啊,是不是程序出错了?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-6-4 08:58:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

这没有什么奇怪的,3dmax里面有材质组的设定,一些面可以设定同一组材质。

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-6-4 18:18:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

可能我没说清楚,是只有一个材质,但有两个Mesh在不同的场景中,被赋予同一个材质,但是分别导出的,但导出后两个模型的MaterialID不一样,一个是0,一个是1,按道理应该是同时是0.

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-6-5 18:48:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

彻底无语了,前几天还很好的,同一句代码
m_faces[m_header.nNumFaces+i].nMaterialID=(UINT)(face->matID);
为什么同一个材质赋给不同的物体,最后得到的物体的面的MaterialID会不一样,一个是0,一个是1,也没怎么改程序代码,这个也太怪了吧。而且还会出现物体只有一个材质,面的MaterialID会出现0,1两个的情况,太怪了。郁闷得饭都吃不下了。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-6-5 19:50:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

我都跟你说过了,你试试在3dmax里面创建一个立方体,然后转换成可编辑网格,进入多边形面板
你会发现每个面的材质id都是不一样的,3dmax这样设计是为了能支持多维子材质
你不能理解成一个材质就直接赋予所有的面,3dmax的材质可以有多维子材质,所以每个面的材质id都不一定相同

我之前跟你提过了一个过滤的算法,你该把所有面的材质ID全部遍历列出来,所有面对应的法线,uv等信息都
列出来,然后进行筛选,需要有个过滤重复数据的算法,做完以后,法线,uv,索引,材质什么的数据自然都对应理顺了
N维材质也不成问题。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-6-5 20:00:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

再给你点提示吧,其实根本就不用迷信什么MaterialID,我解析的时候根本不看这个数据
唯一的原则就是重复数据筛选,基本上无敌:

思想很简单,
A面取出了材质m1 ->加入vector<材质> mt --》记录attributeId = 0
B面取出了材质m2 ->查找 mt里面有没有值完全一样的材质,没有的话继续加入 mt --》记录attributeId = 1
C面取出材质m3   ->查找mt里面有没有值完全一样的材质,发现第一个加入的m1和m3的完全一样,那么不用加入到mt去了直接记录attributeId=0
D面
E面
...

当你遍历完所有的面,能找到的所有材质集合出来了,每个面对应的材质的集合索引编号也出来了,算法就这么简单,其他的法线,顶点索引,uv都是这个算法

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-6-6 00:01:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

这个我考虑过的,但当你要导出多个Mesh的时候,不同的Mesh有相同的Material,要将在不同的Mesh上具有相同的Material的面都积集在一起,觉得弄起来很麻烦。
但这个有个好处,在绘制时不用再对面以Material来分组,因为在导出时已经分好了。
实在不行的话,就换这种想法来实现一下了。但上面我提的问题问什么会出现,我还是想不通。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-6-6 00:21:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

我这个方法绝对无敌,多个mesh也没有问题。
这是数据挖掘和规划最基本最有效的方法,关键看你怎么优化了。
如果顶点一多,并且算法不忧,那是吃不消的。

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-6-6 19:03:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

感谢兔牙的Tonyke哈。

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-6-6 19:12:00 | 显示全部楼层

Re:今天遇到件奇怪的事情,用同一个导出插件导出的两个

能顺便说一下导出动画的思路吗?谢谢。看了一下午的源码跟SDK了,还没怎么搞懂。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 01:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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