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

📄 myd3d.h

📁 极限赛车CarGameDemo DirectX9
💻 H
字号:
#ifndef _MYD3D_H
#define _MYD3D_H
//---------------------------------------------------------------------------------------------
//宏定义
//---------------------------------------------------------------------------------------------
#define KEYDOWN(vk_code)((GetAsyncKeyState(vk_code)&0x8000)?1:0)				// KeyDown
#define KEYUP(vk_code)((GetAsyncKeyState(vk_code)&0x8000)?0:1)					// KeyUp
#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }
//---------------------------------------------------------------------------------------------
//命名空间
//---------------------------------------------------------------------------------------------
namespace d3d
{
	template<class T> void Release(T t)
	{
		if( t )
		{
			t->Release();
			t = 0;
		}
	}
		
	template<class T> void Delete(T t)
	{
		if( t )
		{
			delete t;
			t = 0;
		}
	}
	//
	// Colors
	//
	const D3DXCOLOR      WHITE( D3DCOLOR_XRGB(255, 255, 255) );
	const D3DXCOLOR      BLACK( D3DCOLOR_XRGB(  0,   0,   0) );
	const D3DXCOLOR        RED( D3DCOLOR_XRGB(255,   0,   0) );
	const D3DXCOLOR      GREEN( D3DCOLOR_XRGB(  0, 255,   0) );
	const D3DXCOLOR       BLUE( D3DCOLOR_XRGB(  0,   0, 255) );
	const D3DXCOLOR     YELLOW( D3DCOLOR_XRGB(255, 255,   0) );
	const D3DXCOLOR       CYAN( D3DCOLOR_XRGB(  0, 255, 255) );
	const D3DXCOLOR    MAGENTA( D3DCOLOR_XRGB(255,   0, 255) );

	//
	// Lights
	//

	D3DLIGHT9 InitDirectionalLight(D3DXVECTOR3* direction, D3DXCOLOR* color);
	D3DLIGHT9 InitPointLight(D3DXVECTOR3* position, D3DXCOLOR* color);
	D3DLIGHT9 InitSpotLight(D3DXVECTOR3* position, D3DXVECTOR3* direction, D3DXCOLOR* color);

	//
	// Materials
	//

	D3DMATERIAL9 InitMtrl(D3DXCOLOR a, D3DXCOLOR d, D3DXCOLOR s, D3DXCOLOR e, float p);

	const D3DMATERIAL9 WHITE_MTRL  = InitMtrl(WHITE, WHITE, WHITE, BLACK, 2.0f);
	const D3DMATERIAL9 RED_MTRL    = InitMtrl(RED, RED, RED, BLACK, 2.0f);
	const D3DMATERIAL9 GREEN_MTRL  = InitMtrl(GREEN, GREEN, GREEN, BLACK, 2.0f);
	const D3DMATERIAL9 BLUE_MTRL   = InitMtrl(BLUE, BLUE, BLUE, BLACK, 2.0f);
	const D3DMATERIAL9 YELLOW_MTRL = InitMtrl(YELLOW, YELLOW, YELLOW, BLACK, 2.0f);
	//
	//Vertex
	//
	struct Vertex
	{
		Vertex(){}
		Vertex(float x, float y, float z, 
			float nx, float ny, float nz,
			float u, float v)
		{
			_x  = x;  _y  = y;  _z  = z;
			_nx = nx; _ny = ny; _nz = nz;
			_u  = u;  _v  = v;
		}
		float _x, _y, _z;
		float _nx, _ny, _nz;
		float _u, _v;

		static const DWORD FVF;
	};
	//xz平面上的线
	struct LineXZ
	{
		LineXZ();
		LineXZ(float k, float c, bool b);
		float _k;
		float _c;
		bool _noResult;
	};

	//边界球和边界盒
	//         
//                                            max
//              ------------------------------
//             /|                           /|
//            / |                          / |
//           /  |                         /  |
//          /   |                        /   |
//         /    |                       /    |
//        /     |                      /     |
//       /      |                     /      |
//      /       |                    /       |
//     /        |                   /        |
//    /         |                  /         |
//   /----------------------------/          |
//   |          |                 |          |
//   |          |         *       |          |      +Y
//   |          |                 |          | 
//   |          |-----------------|----------|      |
//   |         /                  |         /       |
//   |        /                   |        /        |  
//   |       /                    |       /         |		+Z
//   |      /                     |      /          |     /
//   |     /                      |     /       0   |    /        1
//   |    /                       |    /         *--|---/--------*   
//   |   /                        |   /         /   |  /		/
//   |  /                         |  /         /    | /		   /	
//   | /                          | /         /    4|/		  /	
//   |/                           |/         /      *\-------/---------- +X
//   ------------------------------         /         \ 	/
// min                                     /       _xzlmax /
//                                        /             \ /    _vxz[0~4],_Nvxz[0~4]		
//									   3 *---------------* 2
	struct BoundingBox
	{
		BoundingBox();

		bool isPointInside(D3DXVECTOR3& p);

		D3DXVECTOR3 _min;
		D3DXVECTOR3 _max;
		//用来存放盒子在xz平面投影的4个点坐标和中心点坐标
		D3DXVECTOR3 _vxz[5];
		//盒子投影在xz面上,投影面边上的点到中心点的最长
		float _xzlmax;
		//存放变化后的
		D3DXVECTOR3 _Nvxz[5];
	};

	struct BoundingSphere
	{
		BoundingSphere();
		bool isPointInside(D3DXVECTOR3& p);

		D3DXVECTOR3 _center;
		float       _radius;
		//变化后的
		D3DXVECTOR3 _Ncenter;
	};
	const float INFINITY = FLT_MAX;
	const float EPSILON  = 0.001f;

	void getLine(D3DXVECTOR3 p1, D3DXVECTOR3 p2 ,d3d::LineXZ &l);

	int lAndP(const d3d::LineXZ &l ,const D3DXVECTOR3 &p);
	bool pOnSLine( const D3DXVECTOR3 &p1,  const D3DXVECTOR3 &p2, const D3DXVECTOR3 &p);
	//获得随机值的函数
	float getRandomMinMax( float fMin, float fMax );
	D3DXVECTOR3 getRandomVector( void );
	D3DXVECTOR3 getPosOnTrack(void);

	//类型转换
	DWORD FtoDw(float f);
	struct Gtime
	{
		Gtime(float time);
		~Gtime(void);
		int _minute;
		int _second;
	};
	
}
#endif

⌨️ 快捷键说明

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