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

📄 gnode.h

📁 3D游戏展示程序
💻 H
字号:
//--------------------------------------------------
//  Desc: Game Object Node
//  Date: 2007.3.12 /update
//  Author: artsylee
//
//  Copyright (C) 2007 artsylee
//
//--------------------------------------------------

#ifndef _GNODE_
#define _GNODE_

#include <vector>
#include <d3d9.h>
#include <d3dx9.h>

enum Node_Type
{
	NT_DEFAULT = 0,
	NT_MS3D_MODEL,
	NT_X_MODEL,
	NT_X_SKIN_MODEL,
	NT_WATER,
	NT_CAMERA,
};

class GNode
{
	enum TransformSpace
	{
		TS_LOCAL,
		TS_PARENT,
		TS_WORLD
	};
	
public:
	GNode(void);
	virtual ~GNode(void);

	void GetWorldTransform(D3DXMATRIX *pMatWorld);

	void SetPosition(const D3DXVECTOR3 &pos);
	void GetPosition(D3DXVECTOR3 *pos);
	void SetScale(const D3DXVECTOR3 &scale);
	void GetScale(D3DXVECTOR3 *scale);
	void SetRotate(const D3DXVECTOR3 &rotate);
	void GetRotate(D3DXVECTOR3 *rotate);
	void  SetRotateX(float value);
	float GetRotateX(void);
	void  SetRotateY(float value);
	float GetRotateY(void);
	void  SetRotateZ(float value);
	float GetRotateZ(void);
	void SetName(const char *pName);
	void GetName(char *pName);
	int	 GetNodeType(void);
	char*GetNodeTypeString(void);

	D3DXVECTOR3 GetDerivedPos(void);
	D3DXMATRIX GetDerivedOrientation(void);
	D3DXVECTOR3 GetDerivedScale(void);

	void Translate(const D3DXVECTOR3 &d, TransformSpace relativeTo = TS_PARENT);
//	void Rotate(const D3DXVECTOR3 &axis, float angle, TransformSpace relativeTo = TS_LOCAL);

	void UpdateFromParent();
	void Update();

	void AddChildNode(GNode *pChild);
	void RemoveChildNode(GNode *pChild);

	//设置父矩阵
	void SetParentMatrix(const D3DXMATRIX &mat);
	D3DXMATRIX GetParentMaxtrix();
	void UseParentMatrix(bool bIsUse);
	bool IsUseParentMatrix(void);

	//是否从父类继承旋转
	void SetRotateFromParent(bool bRotateFromParent);
	//是否从父类继承缩放
	void SetScaleFromParent(bool bScaleFromParent);

	// 显示节点的坐标系
	void DrawCoordinates(void);

protected:
	void SetNodeType(int type);

private:
	void NeedUpdate();

protected:
	// 相对于父类的方向, 缩放, 位置
	D3DXMATRIX		m_Orientation;	
	D3DXVECTOR3		m_vRotate;
	D3DXVECTOR3		m_vScale;
	D3DXVECTOR3		m_vPos;
	bool			m_bUpdateFromParent;
	bool			m_bRotateFromParent;
	bool			m_bScaleFromParent;

	D3DXMATRIX			m_CachedWorldTrans;
	bool				m_bCachedOutOfDate;

	char				m_szName[256]; 
	int					m_NodeType;
	GNode			   *m_pParent;
	std::vector<GNode*>	m_Children;
protected:
	D3DXVECTOR3			m_vDerivedPos;
	D3DXMATRIX			m_DerivedOrientation;		
	D3DXVECTOR3			m_vDerivedScale;

	bool				m_bIsUseParentMatrix;
	D3DXMATRIX			m_ParentMatrix;
};

#endif // _GNODE_

⌨️ 快捷键说明

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