⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xloader.h

📁 X文件读取插件
💻 H
字号:
/*************************************************************************/
/*	File : XLoader.h				 				 					 */
/*																		 */	
/*	DirectX .X files loader												 */	
/*																		 */	
/*	Virtools SDK 														 */	 
/*	Copyright (c) Virtools 2000, All Rights Reserved.					 */	
/*************************************************************************/

#ifndef _XLOADER_H
#define _XLOADER_H

#include "Windows.h"
#include "stdio.h"
#include "DxFile.h"
#include "rmxfguid.h"
#include "rmxftmpl.h"
#include "Ge2Virtools.h"


// Hash Tables (objects name <-> objects)
// used for meshes , materials and frames
typedef XHashTable<CKObject*,XString> XCKObjectsHashTable;			
typedef XHashTable<CKObject*,XString>::Iterator XCKObjectsHashTableIt;		
typedef XHashTable<CKObject*,XString>::Pair XCKObjectsHashTablePair;



// X File rotate key structure 
struct XFileRotateKey
{
	DWORD			Time;
	DWORD			FCount; // Normally always 4	
	float			w;
	float			x;
	float			y;
	float			z;
};

// X File position and scale key structure
struct XFileVectorKey
{
	DWORD	Time;
	DWORD	FCount;			// Normally always 3	
	VxVector Key;	
};


// X File Matrix key structure
struct XFileMatrixKey
{
	DWORD	Time;
	DWORD	FCount;			// Normally always 16	
	VxMatrix Key;	
};

XString GetFileObjectName(LPDIRECTXFILEOBJECT obj);


#define SAFERELEASE(x) { if (x) x->Release(); x = NULL; }

/**************************************************
+ Overload of a model reade
+ 
***************************************************/	
class CKXReader: public CKModelReader {
public:	
	void Release() {delete this; };
	
// Reader Info
	virtual CKPluginInfo* GetReaderInfo();

// No specific Options
	virtual int GetOptionsCount() { return 0; }
	virtual CKSTRING GetOptionDescription(int i) { return NULL; }
	
// This reader can only load .X files
	virtual CK_DATAREADER_FLAGS GetFlags() {return (CK_DATAREADER_FLAGS)CK_DATAREADER_FILELOAD;}

// Load Method
	virtual CKERROR Load(CKContext* context,CKSTRING FileName,CKObjectArray *liste,CKDWORD LoadFlags,CKCharacter *carac=NULL);

	CKXReader() {
		m_XFile = NULL;
		m_Context = NULL;
		m_VirtoolsExport = NULL;
		m_XFileEnumerator = NULL;
		m_Unnamed		 = 0;
	}
	~CKXReader() {
		CleanUp();
	}

protected:
	void CleanUp() {
		SAFERELEASE(m_XFileEnumerator);
		SAFERELEASE(m_XFile);
		delete m_VirtoolsExport;
		m_VirtoolsExport = NULL;
	}
//-- High level 
	HRESULT LoadFileData(LPDIRECTXFILEDATA CurData,CK3dEntity* Parent);
//-- Medium level 
	HRESULT LoadAnimationSet(LPDIRECTXFILEDATA CurData);
	HRESULT LoadAnimation(LPDIRECTXFILEDATA CurData);
	HRESULT LoadMesh(LPDIRECTXFILEOBJECT CurData,CK3dEntity* Parent);
	CKMaterial* LoadMaterial(LPDIRECTXFILEOBJECT CurData);
//-- low level ....

//--- Per Anim
	void LoadAnimationPositionKey(CKObjectAnimation* anim,DWORD KeyCount,DWORD* keys);
	void LoadAnimationRotationKey(CKObjectAnimation* anim,DWORD KeyCount,DWORD* keys);
	void LoadAnimationScaleKey(CKObjectAnimation* anim,DWORD KeyCount,DWORD* keys);
	void LoadAnimationMatrixKey(CKObjectAnimation* anim,DWORD KeyCount,DWORD* keys);

//--- Per Mesh
	HRESULT LoadMeshVertexColors(LPDIRECTXFILEDATA CurData,VirtoolsTransitionMesh* m);
	HRESULT LoadMeshTextureCoords(LPDIRECTXFILEDATA CurData,VirtoolsTransitionMesh* m);
	HRESULT LoadMeshMaterials(LPDIRECTXFILEDATA CurData,VirtoolsTransitionMesh* m);
	HRESULT LoadMeshNormals(LPDIRECTXFILEDATA CurData,VirtoolsTransitionMesh* m);
	HRESULT LoadSkinBone(LPDIRECTXFILEDATA CurData,VirtoolsTransitionMesh* m,CK3dEntity* Parent);
//--- Per Frame
	HRESULT LoadTransformationMatrix(LPDIRECTXFILEDATA CurData,CK3dEntity* Parent);

	//--- Return TRUEif we are in character mode (in which case 
	//--- we have to create bodyparts instead of CK3dobjects...
	BOOL CharacterMode() { return m_Character ? TRUE : ((m_LoadFlags & CK_LOAD_ASCHARACTER)!=0); }

	//-- For unnamed objects return a generic string "Unnamed_XX"  
	XString GetUnnamed() {  XString Temp = "Unnamed_"; Temp << m_Unnamed++; return Temp; }

public: 
	CKContext*					m_Context;
	CK_OBJECTCREATION_OPTIONS	m_CreationOptions;
	CKCharacter*				m_Character;
	DWORD						m_LoadFlags;
	CK_CLASSID					m_3dObjectsClass;
	XString						m_FileName;

	Export2Virtools*			m_VirtoolsExport;	
	XCKObjectsHashTable			m_MeshHashTable;
	XCKObjectsHashTable			m_FrameHashTable;
	XCKObjectsHashTable			m_MaterialHashTable;
	int							m_Unnamed;
	float						m_AnimationLength;

//--- X file objects
	LPDIRECTXFILE						m_XFile;	
	LPDIRECTXFILEENUMOBJECT				m_XFileEnumerator;	
};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -