游戏开发论坛

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

3dsMax插件问题,是在不明白,请教大家

[复制链接]

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-4 20:50:00 | 显示全部楼层 |阅读模式
今日动手是着把XSkinExp大修改,但出了问题,请大家指教,代码如下,红字出错:
#include "pch.h"
#include "XSkinExp.h"
#include "decomp.h"

#include <initguid.h>

#include "XSkinExpTemplates.h"
#include "dxfile.h"
#include "rmxfguid.h"
#include "rmxftmpl.h"
#include<fstream>
using namespace std;

INode *node;INode *rnode;
fstream file;

class CFindRootNode : public ITreeEnumProc
{
public:
    CFindRootNode()
        :m_pNodeRoot(NULL) {}

    virtual int callback(INode *pNode)
    {
        INode *pNodeCur = pNode;

        while (!pNodeCur->IsRootNode())
        {
            pNodeCur = pNodeCur->GetParentNode();
        }
        m_pNodeRoot = pNodeCur;

        return TREE_ABORT;
    }

    INode *m_pNodeRoot;
};

static XSkinExpDesc HDesc;
ClassDesc* GetXSkinExpDesc() {return &HDesc;}

void XSkinExpDesc::ResetClassParams (BOOL fileReset)
{
}

XSkinExp::XSkinExp()
{
}

XSkinExp::~XSkinExp()
{

}

int XSkinExp::ExtCount()
{
        return 1;
}

const TCHAR *XSkinExp::Ext(int n)
{        
        return _T(".X");
}

const TCHAR *XSkinExp:ongDesc()
{
        return _T("X-FILE");
}

const TCHAR *XSkinExp::ShortDesc()
{            
        return _T("X-File");
}

const TCHAR *XSkinExp::AuthorName()
{            
        return _T("Craig Peeper");
}

const TCHAR *XSkinExp::CopyrightMessage()
{   
        return _T("Copyright 2000, MicroSoft");
}

const TCHAR *XSkinExp::OtherMessage1()
{        
        return _T("");
}

const TCHAR *XSkinExp::OtherMessage2()
{        
        return _T("");
}

unsigned int XSkinExp::Version()
{               
        return 100;
}

void XSkinExp::ShowAbout(HWND hWnd)
{            
}

BOOL XSkinExp::SupportsOptions(int ext, DWORD options)
{
        return ( options == SCENE_EXPORT_SELECTED );
}
TriObject *GetTriObjectFromObjRef(Object* pObj,         BOOL *pbDeleteIt)
{
        TriObject *pTri;
        assert(pObj != NULL);
        assert(pbDeleteIt != NULL);

        *pbDeleteIt = FALSE;

pObj= pObj->Eval(0).obj;
        assert(pObj != NULL);

        if (pObj->CanConvertToType(Class_ID(TRIOBJ_CLASS_ID, 0)))
        {
                pTri = (TriObject *) pObj->ConvertToType(0, Class_ID(TRIOBJ_CLASS_ID, 0));

                if (pObj != pTri)
                        *pbDeleteIt = TRUE;
                return pTri;
        }
        else
        {
                return NULL;
        }
}
void DoMesh(INode* pNode)
{       
        TriObject *pTriObject = NULL;
        Mesh *pMesh;
        DWORD nVert, nFace;
    BOOL bDeleteTriObject = false;

        const ObjectState &pWorldObjState = pNode->EvalWorldState(0);
        pTriObject = GetTriObjectFromObjRef(pWorldObjState.obj, &bDeleteTriObject);
        pMesh = &(pTriObject->mesh);
        pMesh->RemoveIllegalFaces();
        pMesh->RemoveDegenerateFaces();
        pMesh->DeleteIsoVerts();
        pMesh->DeleteIsoMapVerts();

        pMesh->checkNormals(TRUE);
        Matrix3 matNodeTM = pNode->GetObjTMAfterWSM(0);

        BOOL bSwapTriOrder = !matNodeTM.Parity();


        nVert=pMesh->numVerts;
        nFace=pMesh->numFaces;

        file<<nVert;
        for(DWORD i=0;i<nVert;i++)
                file<<pMesh->verts.x<<pMesh->verts.y<<pMesh->verts.z<<pMesh->getNormal(i).x<<pMesh->getNormal(i).y<<pMesh->getNormal(i).z;
        file<<nFace;
        for(i=0;i<nFace;i++)
                if( bSwapTriOrder )
                        file<<pMesh->faces.v[0]<<pMesh->faces.v[1]<<pMesh->faces.v[2];
                else
                        file<<pMesh->faces.v[0]<<pMesh->faces.v[2]<<pMesh->faces.v[1];
        DWORD  cChildren = pNode->NumberOfChildren();
   for (int iChild = 0; iChild < cChildren; iChild++)
    {
        DoMesh(pNode->GetChildNode(iChild));
        }

}
int XSkinExp:oExport(const TCHAR *szFilename,ExpInterface *ei,
                                  Interface *i, BOOL suppressPrompts, DWORD options)
{
        HRESULT hr;
    CFindRootNode RootNode;

        BOOL bSaveSelection = (options & SCENE_EXPORT_SELECTED);

        if (szFilename == NULL)
                return FALSE;

        ei->theScene ->EnumTree (&RootNode);
        rnode=RootNode.m_pNodeRoot ;
        file.open (szFilename);
        DoMesh(rnode);
        file.close ();
       
        return TRUE;
}

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
 楼主| 发表于 2005-5-7 12:22:00 | 显示全部楼层

Re:3dsMax插件问题,是在不明白,请教大家

没人会吗?

12

主题

58

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2005-5-8 11:46:00 | 显示全部楼层

Re:3dsMax插件问题,是在不明白,请教大家

游戏编程精粹2上又一个插件例子,你可以参考一下 。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
 楼主| 发表于 2005-5-8 12:10:00 | 显示全部楼层

Re:3dsMax插件问题,是在不明白,请教大家

可以发上来吗?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
 楼主| 发表于 2005-5-18 12:35:00 | 显示全部楼层

Re:3dsMax插件问题,是在不明白,请教大家

up!
不明白物体导出时的状态应该怎样?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 16:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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