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

📄 model.h

📁 骨骼动画....把魔兽模型解出的代码..
💻 H
字号:
//+-----------------------------------------------------------------------------
//| Inclusion guard
//+-----------------------------------------------------------------------------
#ifndef MAGOS_MODEL_H
#define MAGOS_MODEL_H


//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "Misc.h"


//+-----------------------------------------------------------------------------
//| Pre-declared classes
//+-----------------------------------------------------------------------------
class MODEL_BASE;
class MODEL_BONE;
class MODEL_GEOSET;
class MODEL_GEOSET_ANIMATION;
class MODEL_GEOSET_VERTEX;
class MODEL_GEOSET_FACE;
class MODEL_GEOSET_GROUP;
class MODEL_TEXTURE;
class MODEL_TEXTURE_ANIMATION;
class MODEL_MATERIAL;
class MODEL_MATERIAL_LAYER;
class MODEL_SEQUENCE;
class MODEL_GLOBAL_SEQUENCE;
class MODEL_LIGHT;
class MODEL_HELPER;
class MODEL_CAMERA;
class MODEL_ATTACHMENT;
class MODEL_EVENT_OBJECT;
class MODEL_COLLISION_SHAPE;
class MODEL_PARTICLE_EMITTER;
class MODEL_PARTICLE_EMITTER_2;
class MODEL_RIBBON_EMITTER;


//+-----------------------------------------------------------------------------
//| Model info data structure
//+-----------------------------------------------------------------------------
struct MODEL_INFO_DATA
{
	MODEL_INFO_DATA()
	{
		Version = MODEL_DEFAULT_VERSION;
		Name = "Name";
		AnimationFile = "";

		BlendTime = 150;
	}

	DWORD Version;
	std::string Name;
	std::string AnimationFile;

	EXTENT Extent;
	INT BlendTime;
};


//+-----------------------------------------------------------------------------
//| Model data structure
//+-----------------------------------------------------------------------------
struct MODEL_DATA
{
	MODEL_DATA()
	{
		//Empty
	}

	MODEL_INFO_DATA Info;

	SIMPLE_CONTAINER<MODEL_BASE*> BaseContainer;

	SIMPLE_CONTAINER<MODEL_ATTACHMENT*> AttachmentContainer;
	SIMPLE_CONTAINER<MODEL_BONE*> BoneContainer;
	SIMPLE_CONTAINER<MODEL_COLLISION_SHAPE*> CollisionShapeContainer;
	SIMPLE_CONTAINER<MODEL_EVENT_OBJECT*> EventObjectContainer;
	SIMPLE_CONTAINER<MODEL_HELPER*> HelperContainer;
	SIMPLE_CONTAINER<MODEL_LIGHT*> LightContainer;
	SIMPLE_CONTAINER<MODEL_PARTICLE_EMITTER*> ParticleEmitterContainer;
	SIMPLE_CONTAINER<MODEL_PARTICLE_EMITTER_2*> ParticleEmitter2Container;
	SIMPLE_CONTAINER<MODEL_RIBBON_EMITTER*> RibbonEmitterContainer;

	SIMPLE_CONTAINER<MODEL_CAMERA*> CameraContainer;
	SIMPLE_CONTAINER<MODEL_GEOSET*> GeosetContainer;
	SIMPLE_CONTAINER<MODEL_GEOSET_ANIMATION*> GeosetAnimationContainer;
	SIMPLE_CONTAINER<MODEL_GLOBAL_SEQUENCE*> GlobalSequenceContainer;
	SIMPLE_CONTAINER<MODEL_MATERIAL*> MaterialContainer;
	SIMPLE_CONTAINER<D3DXVECTOR3*> PivotPointContainer;
	SIMPLE_CONTAINER<MODEL_SEQUENCE*> SequenceContainer;
	SIMPLE_CONTAINER<MODEL_TEXTURE*> TextureContainer;
	SIMPLE_CONTAINER<MODEL_TEXTURE_ANIMATION*> TextureAnimationContainer;
};


//+-----------------------------------------------------------------------------
//| Model class
//+-----------------------------------------------------------------------------
class MODEL
{
	public:
		CONSTRUCTOR MODEL();
		DESTRUCTOR ~MODEL();

		VOID Clear();

		MODEL_DATA& Data();

		VOID Rebuild();
		VOID Render(INT TimeDifference);
		VOID PlayAnimation(MODEL_SEQUENCE* Sequence);

		VOID CalculateBoundsRadius();
		FLOAT GetBoundsRadius();
		D3DXVECTOR3 GetBoundsCenter();

		MODEL_GEOSET* GetIntersectedGeoset(CONST D3DXVECTOR3& RayPosition, CONST D3DXVECTOR3& RayDirection);

		BOOL AddAttachment(MODEL_ATTACHMENT* Attachment, MODEL_BASE* ParentNode = NULL);
		BOOL AddBone(MODEL_BONE* Bone, MODEL_BASE* ParentNode = NULL);
		BOOL AddCollisionShape(MODEL_COLLISION_SHAPE* CollisionShape, MODEL_BASE* ParentNode = NULL);
		BOOL AddEventObject(MODEL_EVENT_OBJECT* EventObject, MODEL_BASE* ParentNode = NULL);
		BOOL AddHelper(MODEL_HELPER* Helper, MODEL_BASE* ParentNode = NULL);
		BOOL AddLight(MODEL_LIGHT* Light, MODEL_BASE* ParentNode = NULL);
		BOOL AddParticleEmitter(MODEL_PARTICLE_EMITTER* ParticleEmitter, MODEL_BASE* ParentNode = NULL);
		BOOL AddParticleEmitter2(MODEL_PARTICLE_EMITTER_2* ParticleEmitter2, MODEL_BASE* ParentNode = NULL);
		BOOL AddRibbonEmitter(MODEL_RIBBON_EMITTER* RibbonEmitter, MODEL_BASE* ParentNode = NULL);

		BOOL AddCamera(MODEL_CAMERA* Camera);
		BOOL AddGeoset(MODEL_GEOSET* Geoset, BOOL Imported = FALSE);
		BOOL AddGeosetAnimation(MODEL_GEOSET_ANIMATION* GeosetAnimation);
		BOOL AddGlobalSequence(MODEL_GLOBAL_SEQUENCE* GlobalSequence);
		BOOL AddMaterial(MODEL_MATERIAL* Material);
		BOOL AddPivotPoint(D3DXVECTOR3* PivotPoint);
		BOOL AddSequence(MODEL_SEQUENCE* Sequence);
		BOOL AddTexture(MODEL_TEXTURE* Texture);
		BOOL AddTextureAnimation(MODEL_TEXTURE_ANIMATION* TextureAnimation);

		BOOL RemoveAttachment(MODEL_ATTACHMENT* Attachment, HWND Window = NULL);
		BOOL RemoveBone(MODEL_BONE* Bone, HWND Window = NULL);
		BOOL RemoveCollisionShape(MODEL_COLLISION_SHAPE* CollisionShape, HWND Window = NULL);
		BOOL RemoveEventObject(MODEL_EVENT_OBJECT* EventObject, HWND Window = NULL);
		BOOL RemoveHelper(MODEL_HELPER* Helper, HWND Window = NULL);
		BOOL RemoveLight(MODEL_LIGHT* Light, HWND Window = NULL);
		BOOL RemoveParticleEmitter(MODEL_PARTICLE_EMITTER* ParticleEmitter, HWND Window = NULL);
		BOOL RemoveParticleEmitter2(MODEL_PARTICLE_EMITTER_2* ParticleEmitter2, HWND Window = NULL);
		BOOL RemoveRibbonEmitter(MODEL_RIBBON_EMITTER* RibbonEmitter, HWND Window = NULL);

		BOOL RemoveCamera(MODEL_CAMERA* Camera, HWND Window = NULL);
		BOOL RemoveGeoset(MODEL_GEOSET* Geoset, HWND Window = NULL);
		BOOL RemoveGeosetAnimation(MODEL_GEOSET_ANIMATION* GeosetAnimation, HWND Window = NULL);
		BOOL RemoveGlobalSequence(MODEL_GLOBAL_SEQUENCE* GlobalSequence, HWND Window = NULL);
		BOOL RemoveMaterial(MODEL_MATERIAL* Material, HWND Window = NULL);
		BOOL RemovePivotPoint(D3DXVECTOR3* PivotPoint, HWND Window = NULL);
		BOOL RemoveSequence(MODEL_SEQUENCE* Sequence, HWND Window = NULL);
		BOOL RemoveTexture(MODEL_TEXTURE* Texture, HWND Window = NULL);
		BOOL RemoveTextureAnimation(MODEL_TEXTURE_ANIMATION* TextureAnimation, HWND Window = NULL);

		MODEL_BASE* GetNode(INT ObjectId);
		MODEL_TEXTURE* GetTexture(INT TextureId);

		BOOL CreateTextureModel(CONST std::string& TextureFileName, INT Width, INT Height, INT RealWidth, INT RealHeight);
		BOOL CreateLoadingScreenModel(CONST std::string& TextureFileName);

		VOID GenerateObjectIds();
		VOID ConnectNodes();

		VOID WrapPivotPoints();
		VOID UnwrapPivotPoints();

	protected:
		BOOL AddBaseNode(MODEL_BASE* Node, MODEL_BASE* ParentNode);
		BOOL RemoveBaseNode(MODEL_BASE* Node, HWND Window);

		VOID InsertNode(MODEL_BASE* Node);

		MODEL_GEOSET_VERTEX* CreateVertex(CONST D3DXVECTOR3& Position, CONST D3DXVECTOR3& Normal, CONST D3DXVECTOR2& TexturePosition, INT VertexGroup);
		MODEL_GEOSET_FACE* CreateFace(INT Index1, INT Index2, INT Index3);
		MODEL_GEOSET_GROUP* CreateGroup(CONST std::vector<INT>& MatrixList);

		VOID RenderBones();
		VOID RenderLights();
		VOID RenderCameras();
		VOID RenderAttachments();
		VOID RenderCollisionShapes();

		MODEL_DATA ModelData;
		MODEL_BASE* Root;

		FLOAT BoundsRadius;
		D3DXVECTOR3 BoundsCenter;

		SEQUENCE_TIME AnimationTime;

		REFERENCE<MODEL*, MODEL_SEQUENCE*> SequenceNode;
};


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
extern MODEL Model;


//+-----------------------------------------------------------------------------
//| Post-included files
//+-----------------------------------------------------------------------------
#include "ModelBone.h"
#include "ModelGeoset.h"
#include "ModelGeosetAnimation.h"
#include "ModelTexture.h"
#include "ModelTextureAnimation.h"
#include "ModelMaterial.h"
#include "ModelSequence.h"
#include "ModelGlobalSequence.h"
#include "ModelLight.h"
#include "ModelHelper.h"
#include "ModelCamera.h"
#include "ModelAttachment.h"
#include "ModelEventObject.h"
#include "ModelCollisionShape.h"
#include "ModelParticleEmitter.h"
#include "ModelParticleEmitter2.h"
#include "ModelRibbonEmitter.h"


//+-----------------------------------------------------------------------------
//| End of inclusion guard
//+-----------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

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