📄 myd3d.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 + -