Source code of Windows XP (NT5)
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

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