mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.9 KiB
124 lines
3.9 KiB
//-----------------------------------------------------------------------------
|
|
// File: D3DFile.h
|
|
//
|
|
// Desc: Support code for loading DirectX .X files.
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef D3DFILE_H
|
|
#define D3DFILE_H
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: struct MeshMaterialData
|
|
// Desc: Internal structure for holding material data for within a mesh. This
|
|
// is used because multiple materials can be used in the same mesh.
|
|
//-----------------------------------------------------------------------------
|
|
#define MAX_MATERIAL 16
|
|
#define MAX_TEXTURE_NAME 80
|
|
|
|
struct MeshMaterialData
|
|
{
|
|
D3DMATERIAL7 m_mtrl;
|
|
TCHAR m_strTexture[MAX_TEXTURE_NAME];
|
|
DWORD m_dwNumIndices;
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CD3DFileObject
|
|
// Desc: Internal class for objects in a .X file
|
|
//-----------------------------------------------------------------------------
|
|
class CD3DFileObject
|
|
{
|
|
// Common data
|
|
TCHAR m_strName[80];
|
|
CD3DFileObject* m_pNext;
|
|
CD3DFileObject* m_pChild;
|
|
|
|
// For file frames
|
|
D3DMATRIX m_mat;
|
|
|
|
// For file meshes
|
|
BOOL m_bHasMeshData;
|
|
DWORD m_dwNumVertices;
|
|
D3DVERTEX* m_pVertices;
|
|
DWORD m_dwNumIndices;
|
|
WORD* m_pIndices;
|
|
DWORD m_dwNumMaterials;
|
|
MeshMaterialData m_Material[MAX_MATERIAL];
|
|
BOOL m_bHasAlpha;
|
|
|
|
public:
|
|
// Initializing functions
|
|
VOID AddNext(CD3DFileObject*);
|
|
VOID AddChild(CD3DFileObject*);
|
|
VOID SetName(TCHAR* strName) { StrCpy(m_strName, strName); }
|
|
VOID SetMatrix(D3DMATRIX* pmat) { m_mat = *pmat; }
|
|
VOID SetNormals(D3DVECTOR* pNormals);
|
|
VOID SetTextureCoords(FLOAT* pTexCoords);
|
|
VOID SetMaterialData(DWORD dwMaterial, D3DMATERIAL7* pmtrl, TCHAR*strName);
|
|
VOID AddFace(DWORD dwMaterial, DWORD* pFaceData, DWORD dwNumFaces);
|
|
HRESULT ComputeNormals();
|
|
HRESULT SetMeshGeometry(D3DVECTOR* pvVertices, DWORD dwNumVertices,
|
|
DWORD* pFaces, DWORD dwNumFaces);
|
|
|
|
// Access functions
|
|
TCHAR* GetName() { return m_strName; }
|
|
CD3DFileObject* GetNext() { return m_pNext; }
|
|
CD3DFileObject* GetChild() { return m_pChild; }
|
|
D3DMATRIX* GetMatrix() { return &m_mat; }
|
|
HRESULT GetMeshGeometry(D3DVERTEX** ppVertices,
|
|
DWORD* pdwNumVertices, WORD** ppIndices,
|
|
DWORD* pdwNumIndices);
|
|
|
|
// Common functions
|
|
VOID Render(LPDIRECT3DDEVICE7 pd3dDevice , BOOL bAlpha);
|
|
BOOL EnumObjects(BOOL (*fnCallback)(CD3DFileObject*,D3DMATRIX*,VOID*),
|
|
D3DMATRIX* pmat, VOID* pContext);
|
|
|
|
// Constuctor / destructor
|
|
CD3DFileObject(TCHAR* strName);
|
|
~CD3DFileObject();
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CD3DFile
|
|
// Desc:
|
|
//-----------------------------------------------------------------------------
|
|
class CD3DFile
|
|
{
|
|
CD3DFileObject* m_pRoot;
|
|
|
|
public:
|
|
HRESULT GetMeshVertices(TCHAR* strName, D3DVERTEX** ppVertices,
|
|
DWORD* pdwNumVertices);
|
|
HRESULT GetMeshIndices(TCHAR* strName, WORD** ppIndices,
|
|
DWORD* pdwNumIndices);
|
|
|
|
CD3DFileObject* FindObject(TCHAR* strName);
|
|
VOID EnumObjects(BOOL (*fnCallback)(CD3DFileObject*,D3DMATRIX*,VOID*),
|
|
D3DMATRIX* pmat, VOID* pContext);
|
|
VOID Scale(FLOAT fScale);
|
|
|
|
|
|
|
|
HRESULT Load(LPCTSTR strFilename);
|
|
HRESULT Render(LPDIRECT3DDEVICE7);
|
|
|
|
CD3DFile();
|
|
~CD3DFile();
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|