当前位置:   article > 正文

T3D图形库(一)_t pos 3d

t pos 3d

T3D图形库DDraw及图形算法头文件部分

 

  1. /*2008.9.15T3D图形库——<<windows游戏编程大师技巧>>*///DDraw_lib.h #ifndef DDraw_lib #define DDraw_lib // DEFINES  //默认屏幕值,将被DDraw_Init()调用 #define SCREEN_WIDTH  640       //屏宽 #define SCREEN_HEIGHT 480       //屏高 #define SCREEN_BPP    8         //屏幕色深 #define MAX_COLORS_PALETTE 256  //最大调色板项数 #define DEFAULT_PALETTE_FILE "PALDATA2.PAL"   //默认调色板文件 //全屏/窗口模式标志 #define SCREEN_FULLSCREEN 0 #define SCREEN_WINDOWED   1 //位图 #define BITMAP_ID           0x4D42 #define BITMAP_STATE_DEAD   0 #define BITMAP_STATE_ALIVE  1 #define BITMAP_STATE_DYING  2 #define BITMAP_ATTR_LOADED  128 //位图提取模式 #define BITMAP_EXTRACT_MODE_CELL 0    //单元模式(模板化)    #define BITMAP_EXTRACT_MODE_ABS  1    //绝对模式 //像素格式 #define DD_PIXEL_FORMAT8     8 #define DD_PIXEL_FORMAT555   15 #define DD_PIXEL_FORMAT565   16 #define DD_PIXEL_FORMAT888   24 #define DD_PIXEL_FORMATALPHA 32 //BOBs(子画面) #define BOB_STATE_DEAD         0    // 死亡 #define BOB_STATE_ALIVE        1    // 存在 #define BOB_STATE_DYING        2    // 正在死亡 #define BOB_STATE_ANIM_DONE    1    // 动画状态 #define MAX_BOB_FRAMES         64   // 最多64帧 #define MAX_BOB_ANIMATIONS     16   // 最多16个动画 //BOB属性 #define BOB_ATTR_SINGLE_FRAME   1   // bob只有1帧 #define BOB_ATTR_MULTI_FRAME    2   // bob有多个帧 #define BOB_ATTR_MULTI_ANIM     4   // bob有多个动画 #define BOB_ATTR_ANIM_ONE_SHOT  8   // bob只播放一次一次 #define BOB_ATTR_VISIBLE        16  // bob对象可见 #define BOB_ATTR_BOUNCE         32  // bob边界动作:反弹 #define BOB_ATTR_WRAPAROUND     64  // bob边界动作:回绕 #define BOB_ATTR_LOADED         128 // bob已被加载 #define BOB_ATTR_CLONE          256 // bob是克隆的 //屏幕过渡命令 #define SCREEN_DARKNESS  0         // 变暗 #define SCREEN_WHITENESS 1         // 变亮 #define SCREEN_SWIPE_X   2         // 横向刷新 #define SCREEN_SWIPE_Y   3         // 纵向刷新 #define SCREEN_DISOLVE   4         // 像素溶解 #define SCREEN_SCRUNCH   5         // 压缩 #define SCREEN_BLUENESS  6         // 变蓝 #define SCREEN_REDNESS   7         // 变红 #define SCREEN_GREENNESS 8         // 变绿 //颜色(灯)闪烁 #define BLINKER_ADD           0    // 增加一个闪烁(灯)   #define BLINKER_DELETE        1    // 删除一个闪烁(灯)  #define BLINKER_UPDATE        2    // 更新一个闪烁(灯)  #define BLINKER_RUN           3    // 正常运行 //pi #define PI         ((float)3.141592654f) #define PI2        ((float)6.283185307f) #define PI_DIV_2   ((float)1.570796327f) #define PI_DIV_4   ((float)0.785398163f)  #define PI_INV     ((float)0.318309886f)  //pi/10 // fixed point mathematics constants #define FIXP16_SHIFT     16 #define FIXP16_MAG       65536 #define FIXP16_DP_MASK   0x0000ffff #define FIXP16_WP_MASK   0xffff0000 #define FIXP16_ROUND_UP  0x00008000 // MACROS / //检查键盘按键状态 #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) //创造16位颜色值(1.5.5.5) #define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10)) //创造16位颜色值(5.6.5) #define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11)) //创造24位颜色值(8.8.8) #define _RGB24BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) ) //创造32位颜色值(8.8.8.8) #define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24)) //位操控 #define SET_BIT(word,bit_flag)  ((word)=((word)|(bit_flag))) #define RESET_BIT(word,bit_flag)  ((word)=((word)&(~bit_flag))) //初始化结构体 #define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct));ddstruct.dwSize=sizeof(ddstruct); } //最小/大值 #define MIN(a,b)   (((a)<(b))?(a):(b)) #define MAX(a,b)   (((a)>(b))?(a):(b)) //交换值 #define SWAP(a,b,t)  { t=a;a=b;b=t; } //一些数学宏 #define DEG_TO_RAD(ang)   ((ang)*PI/180.0)    //角度转弧度 #define RAD_TO_DEG(rads)  ((rads)*180.0/PI)   //弧度转角度 //随机取(x,y)中的一个值 #define RAD_RANGE(x,y)    ( (x) + (rand()%((y)-(x)+1)) ) // TYPES // // 基本无符号类型 typedef unsigned short USHORT;typedef unsigned short WORD;typedef unsigned char  UCHAR;typedef unsigned char  BYTE;typedef unsigned int   QUAD;typedef unsigned int   UINT;//存放位图信息的结构体 typedef struct BITMAP_FILE_TAG        {        BITMAPFILEHEADER bitmapfileheader;  // 位图文件头         BITMAPINFOHEADER bitmapinfoheader;  // 位图信息头         PALETTEENTRY     palette[256];      // 调色板项         UCHAR            *buffer;           // 指针指向位图数据         } BITMAP_FILE, *BITMAP_FILE_PTR;// BOB对象结构体 typedef struct BOB_TYP        {        int state;          // 常规状态         int anim_state;     // 动画是否可用         int attr;           // BOB属性         float x,y;            //初始位置         float xv,yv;          //速度         int width, height;  // 宽/高         int width_fill;     // 宽度填充(使宽度为8的倍数)         int bpp;            // 色深         int counter_1;      // 常规计数器         int counter_2;        int max_count_1;           int max_count_2;        int varsI[16];      //整数栈         float varsF[16];    //浮点数栈         int curr_frame;     // 当前帧         int num_frames;     // 总帧数         int curr_animation; // 当前动画索引         int anim_counter;   // 计数器         int anim_index;     // 动画内的帧索引         int anim_count_max; // 在动画前须达到的数         int *animations[MAX_BOB_ANIMATIONS]; // 动画序列         LPDIRECTDRAWSURFACE7 images[MAX_BOB_FRAMES]; // DD 表面         } BOB, *BOB_PTR;//位图数据图像结构体 typedef struct BITMAP_IMAGE_TYP         {        int state;        int attr;        int x,y;        int width,height;        int num_bytes;        int bpp;        UCHAR* buffer;                }BITMAP_IMAGE,*BITMAP_IMAGE_PTR;// 闪烁(灯)结构体 typedef struct BLINKER_TYP        {         //需设置成员         int color_index;         // 颜色索引         PALETTEENTRY on_color;   // RGB值(开)         PALETTEENTRY off_color;  // RGB值(关)         int on_time;             // 帧数(开)         int off_time;            // 帧数(关)         //内部成员         int counter;             // counter for state transitions         int state;               // 灯状态, -1 off, 1 on, 0 dead         } BLINKER, *BLINKER_PTR;//2D向量(整型) typedef struct VERTEX2DI_TYP         {        int x,y;        }VERTEX2DI,*VERTEX2DI_PTR;//2D向量(浮点型) typedef struct VERTEX2DF_TYP         {        float x,y;        }VERTEX2DF,*VERTEX2DF_PTR;//2D多边形 typedef struct POLYGON2D_TYP         {        int state;        int num_verts;        int x0,y0;        int xv,yv;        DWORD color;        VERTEX2DF* vlist;        }POLYGON2D,*POLYGON2D_PTR;// 矩阵描述 //3X3矩阵 typedef struct MATRIX3X3_TYP       {      union      {        float M[3][3];        struct          {          float M00,M01,M02;          float M10,M11,M12;          float M20,M21,M22;        };      };      }MATRIX3X3,*MATRIX3X3_PTR;//1X3矩阵 typedef struct MATRIX1X3_TYP       {      union      {        float M[3];        struct          {          float M00,M01,M02;        };      };      }MATRIX1X3,*MATRIX1X3_PTR;//3X2矩阵 typedef struct MATRIX3X2_TYP       {      union      {        float M[3][2];        struct          {          float M00,M01;          float M10,M11;          float M20,M21;        };      };      }MATRIX3X2,*MATRIX3X2_PTR;//1X2矩阵 typedef struct MATRIX1X2_TYP       {      union      {        float M[2];        struct          {          float M00,M01;        };      };      }MATRIX1X2,*MATRIX1X2_PTR;// 函数原型(接口) / // DirectDraw 函数 int DDraw_Init(int width, int height, int bpp, int windowed=0);int DDraw_Shutdown(void);LPDIRECTDRAWCLIPPER DDraw_Attach_Clipper(LPDIRECTDRAWSURFACE7 lpdds, int num_rects, LPRECT clip_list);LPDIRECTDRAWSURFACE7 DDraw_Create_Surface(int width, int height, int mem_flags=0, USHORT color_key_value=0);int DDraw_Flip(void);int DDraw_Wait_For_Vsync(void);int DDraw_Fill_Surface(LPDIRECTDRAWSURFACE7 lpdds, USHORT color, RECT *client=NULL);UCHAR *DDraw_Lock_Surface(LPDIRECTDRAWSURFACE7 lpdds,int *lpitch);int DDraw_Unlock_Surface(LPDIRECTDRAWSURFACE7 lpdds);UCHAR *DDraw_Lock_Primary_Surface(void);int DDraw_Unlock_Primary_Surface(void);UCHAR *DDraw_Lock_Back_Surface(void);int DDraw_Unlock_Back_Surface(void);// BOB 函数 int Create_BOB(BOB_PTR bob,int x, int y,int width, int height,int num_frames,int attr,               int mem_flags=0, USHORT color_key_value=0, int bpp=8);              int Clone_BOB(BOB_PTR source, BOB_PTR dest);int Destroy_BOB(BOB_PTR bob);int Draw_BOB(BOB_PTR bob, LPDIRECTDRAWSURFACE7 dest);int Draw_Scaled_BOB(BOB_PTR bob, int swidth, int sheight,LPDIRECTDRAWSURFACE7 dest);int Draw_BOB16(BOB_PTR bob, LPDIRECTDRAWSURFACE7 dest);int Draw_Scaled_BOB16(BOB_PTR bob, int swidth, int sheight,LPDIRECTDRAWSURFACE7 dest);int Load_Frame_BOB(BOB_PTR bob, BITMAP_FILE_PTR bitmap, int frame, int cx,int cy,int mode);              int Load_Frame_BOB16(BOB_PTR bob, BITMAP_FILE_PTR bitmap, int frame, int cx,int cy,int mode);  int Animate_BOB(BOB_PTR bob);int Move_BOB(BOB_PTR bob);int Load_Animation_BOB(BOB_PTR bob, int anim_index, int num_frames, int *sequence);int Set_Pos_BOB(BOB_PTR bob, int x, int y);int Set_Vel_BOB(BOB_PTR bob,int xv, int yv);int Set_Anim_Speed_BOB(BOB_PTR bob,int speed);int Set_Animation_BOB(BOB_PTR bob, int anim_index);int Hide_BOB(BOB_PTR bob);int Show_BOB(BOB_PTR bob);int Collision_BOBS(BOB_PTR bob1, BOB_PTR bob2);// 调色板 函数 int Set_Palette_Entry(int color_index, LPPALETTEENTRY color);int Get_Palette_Entry(int color_index, LPPALETTEENTRY color);int Load_Palette_From_File(char *filename, LPPALETTEENTRY palette);int Save_Palette_To_File(char *filename, LPPALETTEENTRY palette);int Save_Palette(LPPALETTEENTRY sav_palette);int Set_Palette(LPPALETTEENTRY set_palette);int Rotate_Colors(int start_index, int end_index);int Blink_Colors(int command, BLINKER_PTR new_light, int id);// 位图函数 int Create_Bitmap(BITMAP_IMAGE_PTR image, int x, int y, int width, int height, int bpp=8);int Destroy_Bitmap(BITMAP_IMAGE_PTR image);int Draw_Bitmap(BITMAP_IMAGE_PTR source_bitmap,UCHAR *dest_buffer, int lpitch, int transparent);int Draw_Bitmap16(BITMAP_IMAGE_PTR source_bitmap,UCHAR *dest_buffer, int lpitch, int transparent);int Load_Image_Bitmap(BITMAP_IMAGE_PTR image,BITMAP_FILE_PTR bitmap,int cx,int cy,int mode);  int Load_Image_Bitmap16(BITMAP_IMAGE_PTR image,BITMAP_FILE_PTR bitmap,int cx,int cy,int mode);               int Scroll_Bitmap(BITMAP_IMAGE_PTR image, int dx, int dy=0);int Copy_Bitmap(BITMAP_IMAGE_PTR dest_bitmap, int dest_x, int dest_y,                 BITMAP_IMAGE_PTR source_bitmap, int source_x, int source_y,                 int width, int height);int Flip_Bitmap(UCHAR *image, int bytes_per_line, int height);// 位图文件函数 int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename);int Unload_Bitmap_File(BITMAP_FILE_PTR bitmap);// GDI 函数 int Draw_Text_GDI(char *text, int x,int y,COLORREF color, LPDIRECTDRAWSURFACE7 lpdds);int Draw_Text_GDI(char *text, int x,int y,int color, LPDIRECTDRAWSURFACE7 lpdds);//误差函数 int Open_Error_File(char *filename, FILE *fp_override=NULL);int Close_Error_File(void);int Write_Error(char *string, ...);// 2d 8/16位三角形函数 void Draw_Top_Tri(int x1,int y1,int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);void Draw_Bottom_Tri(int x1,int y1, int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);void Draw_Top_Tri16(int x1,int y1,int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);void Draw_Bottom_Tri16(int x1,int y1, int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);void Draw_Top_TriFP(int x1,int y1,int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);void Draw_Bottom_TriFP(int x1,int y1, int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);void Draw_Triangle_2D(int x1,int y1,int x2,int y2,int x3,int y3,                      int color,UCHAR *dest_buffer, int mempitch);void Draw_Triangle_2D16(int x1,int y1,int x2,int y2,int x3,int y3,                        int color,UCHAR *dest_buffer, int mempitch);void Draw_TriangleFP_2D(int x1,int y1,int x2,int y2,int x3,int y3,                        int color,UCHAR *dest_buffer, int mempitch);inline void Draw_QuadFP_2D(int x0,int y0,int x1,int y1,                           int x2,int y2,int x3, int y3,                           int color,UCHAR *dest_buffer, int mempitch);//实用工具函数 DWORD Get_Clock(void);DWORD Start_Clock(void);DWORD Wait_Clock(DWORD count);int Collision_Test(int x1, int y1, int w1, int h1,                    int x2, int y2, int w2, int h2); int Color_Scan(int x1, int y1, int x2, int y2,                UCHAR scan_start, UCHAR scan_end,                UCHAR *scan_buffer, int scan_lpitch);int Color_Scan16(int x1, int y1, int x2, int y2,                   USHORT scan_start, USHORT scan_end,                   UCHAR *scan_buffer, int scan_lpitch);int Scan_Image_Bitmap(BITMAP_FILE_PTR bitmap,                          LPDIRECTDRAWSURFACE7 lpdds,                       int cx,int cy);            // 2D基本图元函数 int Draw_Clip_Line(int x0,int y0, int x1, int y1, int color,UCHAR *dest_buffer, int lpitch);int Draw_Clip_Line16(int x0,int y0, int x1, int y1, int color,UCHAR *dest_buffer, int lpitch);int Clip_Line(int &x1,int &y1,int &x2, int &y2);int Draw_Line(int x0, int y0, int x1,int y1, int color,UCHAR *vb_start,int lpitch);int Draw_Line16(int x0, int y0, int x1,int y1, int color,UCHAR *vb_start,int lpitch);int Draw_Pixel(int x, int y,int color,UCHAR *video_buffer, int lpitch);int Draw_Pixel16(int x, int y,int color,UCHAR *video_buffer, int lpitch);int Draw_Rectangle(int x1, int y1, int x2, int y2, int color,LPDIRECTDRAWSURFACE7 lpdds);void HLine(int x1,int x2,int y,int color, UCHAR *vbuffer, int lpitch);void VLine(int y1,int y2,int x,int color, UCHAR *vbuffer, int lpitch);void HLine16(int x1,int x2,int y,int color, UCHAR *vbuffer, int lpitch);void VLine16(int y1,int y2,int x,int color, UCHAR *vbuffer, int lpitch);void Screen_Transitions(int effect, UCHAR *vbuffer, int lpitch);// 常规2D 8/16位 多边形变换函数 int Draw_Filled_Polygon2D(POLYGON2D_PTR poly, UCHAR *vbuffer, int mempitch);int Draw_Filled_Polygon2D16(POLYGON2D_PTR poly, UCHAR *vbuffer, int mempitch);int Translate_Polygon2D(POLYGON2D_PTR poly, int dx, int dy);int Rotate_Polygon2D(POLYGON2D_PTR poly, int theta);int Scale_Polygon2D(POLYGON2D_PTR poly, float sx, float sy);void Build_Sin_Cos_Tables(void);int Translate_Polygon2D_Mat(POLYGON2D_PTR poly, int dx, int dy);int Rotate_Polygon2D_Mat(POLYGON2D_PTR poly, int theta);int Scale_Polygon2D_Mat(POLYGON2D_PTR poly, float sx, float sy);int Draw_Polygon2D(POLYGON2D_PTR poly, UCHAR *vbuffer, int lpitch);int Draw_Polygon2D16(POLYGON2D_PTR poly, UCHAR *vbuffer, int lpitch);// 数学函数(求2点距离) int Fast_Distance_2D(int x, int y);float Fast_Distance_3D(float x, float y, float z);// 碰撞检测函数(找到多边形边框) int Find_Bounding_Box_Poly2D(POLYGON2D_PTR poly,                              float &min_x, float &max_x,                              float &min_y, float &max_y);// 基础矩阵函数 int Mat_Mul_1X2_3X2(MATRIX1X2_PTR ma,                    MATRIX3X2_PTR mb,                   MATRIX1X2_PTR mprod);int Mat_Mul_1X3_3X3(MATRIX1X3_PTR ma,                    MATRIX3X3_PTR mb,                   MATRIX1X3_PTR mprod);int Mat_Mul_3X3(MATRIX3X3_PTR ma,                MATRIX3X3_PTR mb,               MATRIX3X3_PTR mprod);inline int Mat_Init_3X2(MATRIX3X2_PTR ma,                         float m00, float m01,                        float m10, float m11,                        float m20, float m21);// 全局变量  // 这里还是英文注释,容易理解 extern FILE *fp_error;                           // general error file extern char error_filename[80];                  // error file name // notice that interface 4.0 is used on a number of interfaces extern LPDIRECTDRAW7        lpdd;                 // dd object extern LPDIRECTDRAWSURFACE7 lpddsprimary;         // dd primary surface extern LPDIRECTDRAWSURFACE7 lpddsback;            // dd back surface extern LPDIRECTDRAWPALETTE  lpddpal;              // a pointer to the created dd palette extern LPDIRECTDRAWCLIPPER  lpddclipper;          // dd clipper for back surface extern LPDIRECTDRAWCLIPPER  lpddclipperwin;       // dd clipper for window extern PALETTEENTRY         palette[256];         // color palette extern PALETTEENTRY         save_palette[256];    // used to save palettes extern DDSURFACEDESC2       ddsd;                 // a direct draw surface description struct extern DDBLTFX              ddbltfx;              // used to fill extern DDSCAPS2             ddscaps;              // a direct draw surface capabilities struct extern HRESULT              ddrval;               // result back from dd calls extern UCHAR                *primary_buffer;      // primary video buffer extern UCHAR                *back_buffer;         // secondary back buffer extern int                  primary_lpitch;       // memory line pitch extern int                  back_lpitch;          // memory line pitch extern BITMAP_FILE          bitmap8bit;           // a 8 bit bitmap file extern BITMAP_FILE          bitmap16bit;          // a 16 bit bitmap file extern BITMAP_FILE          bitmap24bit;          // a 24 bit bitmap file extern DWORD                start_clock_count;    // used for timing extern int                  windowed_mode;        // tracks if dd is windowed or not // these defined the general clipping rectangle for software clipping extern int min_clip_x,                             // clipping rectangle             max_clip_x,                             min_clip_y,                max_clip_y;                  // these are overwritten globally by DD_Init() extern int screen_width,                            // width of screen            screen_height,                           // height of screen            screen_bpp,                              // bits per pixel             screen_windowed;                         // is this a windowed app?    extern int dd_pixel_format;                         // default pixel format extern int window_client_x0;   // used to track the starting (x,y) client area for extern int window_client_y0;   // for windowed mode directdraw operations // storage for our lookup tables extern float cos_look[361]; // 1 extra so we can store 0-360 inclusive extern float sin_look[361]; // 1 extra so we can store 0-360 inclusive // function ptr to RGB16 builder extern USHORT (*RGB16Bit)(int r, int g, int b);// root functions extern USHORT RGB16Bit565(int r, int g, int b);extern USHORT RGB16Bit555(int r, int g, int b);#endif

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/103434
推荐阅读
相关标签
  

闽ICP备14008679号