|
|
//-----------------------------------------------------------------------------
// 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
|