游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3664|回复: 3

(实在解决不了,都研究很多天了)3DMAX导出插件导出球体正

[复制链接]

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2009-5-24 12:26:00 | 显示全部楼层 |阅读模式
实在弄不出来,我觉得真的没问题,但就是不对


http://topic.csdn.net/u/20090522/13/589aaa49-cbfc-4ff3-ab6c-55be25b1850b.html

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-5-31 17:15:00 | 显示全部楼层

Re:(实在解决不了,都研究很多天了)3DMAX导出插件导出球体

发现渲染得时候以Point的方式可以显示所有的顶点,而且排成的顺序很正确,但以Solid的方式来渲染得话就不行,所以可以确定是索引出了问题。再贴一下导出索引部分的代码:
[code=C/C++]

struct  ModelFace
{
        WORD        wIndices[3];                                                        //Indices
        UINT        nMaterialID;                                                        //MaterialID
};

for (int i=0;i<faceCount;i++)
{
        FaceEx *face=mesh->GetFace(i);
        m_faces[m_header.nNumFaces+i].nMaterialID=(face->matID-1);
        for (int j=0;j<3;j++)
        {
                int k=m_header.nNumVertices+face->vert[j];
                m_faces[m_header.nNumFaces+i].wIndices[j]=k;
                。。。。。
        }
        交换1,2的顺序。   //因为MAX的剪裁与D3D的相反
}
[/code]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-5-31 17:32:00 | 显示全部楼层

Re:(实在解决不了,都研究很多天了)3DMAX导出插件导出球体

给你点提示:导出的时候面的一个每个面都有三个顶点,邻接点的法线也不止一个。
所以导出的时候要做一个算法,过滤掉重复的顶点,记住一定要以面为单位去挖掘数据,包括材质,多重材质都要从面里面去找,不要指望有什么规律。

这是3dmax数据组织的唯一的法则
简单的说就是从面里面找所有的数据,每个顶点的法线都列出来,贴图坐标,材质...
然后过滤掉你认为重复的顶点(过滤重复数据的优化算法一定要注意,先排序然后再滤掉重复),那么数据就正确了。

45

主题

126

帖子

126

积分

注册会员

Rank: 2

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

Re:(实在解决不了,都研究很多天了)3DMAX导出插件导出球体

解决了,爽啊,原本我以为MAX的材质是以1开始的,大错特错阿,也是以1开始的,然后导致程序中索引的数目变成0了,然后就绘制不出来了。终于解决了。休息一下,马上做导出动画。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 04:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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