游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2636|回复: 4

为什么我的MAX插件导出的模型支离破碎,进来看一下.

[复制链接]

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2009-5-17 08:11:00 | 显示全部楼层 |阅读模式
导出球和一些简单的模型没问题,但导出像茶壶那样比较复杂的就不行了,看起来支离破碎的。代码如下:
if (m_pGame)
{
    m_pGame->ReleaseIGame();
    m_pGame=NULL;
}
m_pGame=GetIGameInterface();
IGameConversionManager *cm=GetConversionManager();
cm->SetCoordSystem(IGameConversionManager::IGAME_D3D);
m_pGame->InitialiseIGame(true);
int nodeCount=m_pGame->GetTopLevelNodeCount();
m_nNodes=nodeCount;
int materialCount=m_pGame->GetRootMaterialCount();
if (nodeCount==0)
{
   MessageBox(GetActiveWindow(),"No nodes available to export","Realm Engine Exporter",MB_OK|MB_ICONERROR);
   m_pGame->ReleaseIGame();
   return;
}
for (int nodeIndex=0;nodeIndex<nodeCount;nodeIndex++)
{
        IGameNode *node=m_pGame->GetTopLevelNode(nodeIndex);
        IGameObject *obj=node->GetIGameObject();
        if (obj->GetIGameType()!=IGameMesh::IGAME_MESH)
        {
                break;
        }
        obj->InitializeData();
        IGameMesh *mesh=(IGameMesh*)obj;
        int vertCount=mesh->GetNumberOfVerts();
        m_vertices=(ModelVertex*)realloc(m_vertices,sizeof(ModelVertex)*(m_header.nNumVertices+vertCount));
        int faceCount=mesh->GetNumberOfFaces();
        m_faces=(ModelFace*)realloc(m_faces,sizeof(ModelFace)*(m_header.nNumFaces+faceCount));
        bool flags[65535]={false};
        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].nIndices[j]=k;
                        if (flags[face->vert[j]])
                        {
                                break;
                        }
                        Point3 p=mesh->GetVertex(face->vert[j]);
                        m_vertices[k].fPos[0]=p.x;
                        m_vertices[k].fPos[1]=p.y;
                        m_vertices[k].fPos[2]=p.z;
                        p=mesh->GetNormal(i,j);
                        m_vertices[k].vNormal.x=p.x;
                        m_vertices[k].vNormal.y=p.y;
                        m_vertices[k].vNormal.z=p.z;
                        p=mesh->GetMapVertex(1,face->vert[j]);
                        m_vertices[k].fTexture[0]=p.x;
                        m_vertices[k].fTexture[1]=p.y;
                        flags[face->vert[j]]=true;
                }
        }
                m_header.nNumVertices+=vertCount;
                m_header.nNumFaces+=faceCount;
        }

75

主题

385

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 2009-5-17 13:59:00 | 显示全部楼层

Re: 为什么我的MAX插件导出的模型支离破碎,进来看一下.

把不同贴图的分开即可

45

主题

126

帖子

126

积分

注册会员

Rank: 2

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

Re:为什么我的MAX插件导出的模型支离破碎,进来看一下.

我的自定义模型里只有一个贴图,多种材质(但茶壶只用了一个材质)。材质与纹理应该不是问题,我觉得是否是索引的问题?

0

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2009-5-19 14:29:00 | 显示全部楼层

Re: 为什么我的MAX插件导出的模型支离破碎,进来看一下.

是你的索引的顺序有问题.把索引反一下就好了,之前我也遇到了这样的问题.

45

主题

126

帖子

126

积分

注册会员

Rank: 2

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

Re:为什么我的MAX插件导出的模型支离破碎,进来看一下.

我将原来的V0,V1,V2改为V0,V2,V1后还是不行,但无论顶点的顺序怎么样,导出的球体始终是好的,又是怎么一回事,烦死了,晓不得一个究竟。
大哥能不能帮个忙看一下,如果愿意请留下邮箱,如果不愿意,没关系。只有自己慢慢琢磨了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 07:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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