📄 glbdefine.h
字号:
#define def_FILE_IS_GLB 100 //GLB格式的文件
/*---------------------------------------------------------*\
下面是GLB格式定义
\*---------------------------------------------------------*/
#define def_GLB_FILE_ID "VD->GLB" //GLB文件标识
#define def_GLB_FILE_CURRENT_VERSION 3 //GLB文件版本号
#define def_GLB_FILE_MAX_IMAGE_NUM 1000 //一个GLB文件中最大允许图像数
#define def_GLB_IMAGE_MAX_FRAME_NUM 1000 //一套图像最大允许的帧数
#define def_VD_GLB_FILE_ID_SIZE 20 //文件标识符的长度,包括最后的一个零
#define def_ACT_MAX_NUM 50 //最大允许的动作数,(不能超过255)
#define def_MAX_GLB_IMAGE_NUM 2500 //场景中最大允许的GLB图像数
//1. 文件头结构
typedef struct
{
char szGlbFileId[def_VD_GLB_FILE_ID_SIZE]; //文件标识。内容为“VD->GLB”
WORD wVersion; //GLB文件的当前版本号。此次的版本号为2
DWORD dwFileAvailableSize; //此文件的有效长度
//包含若干帧
WORD nDescribeSize; //描述信息的长度,最大2K个字节
DWORD dwDescribeOffset; //描述信息在GLB文件中的偏移量
DWORD dwpHold[20]; //保留
WORD nTotalImageNumber; // GLB文件中总共拥有的图像套数,每一套图像
char *cpDescribeBuff; //描述信息的缓冲区
DWORD **EachImageOffset; //每一套图像在文件中的偏移量
}GLB_FILE_HEAD;
//2. 动作信息结构
typedef struct
{
WORD nActFrameNumber; //此动作的单个方向的帧数
WORD wActStartFrameOffset; //此动作的第一帧在总的帧中的偏移量
BYTE byActType; //此动作的类型
BYTE byAspectNumber; //此动作的方向数
DWORD dwActDealy; //动作的灵敏度,用来控制动作的灵敏度,此
//值越大,灵敏度越底。比如,在现实世界中
//走的动作比跑的动作要慢,所以走的灵敏度
//的值要比跑的灵敏度的值大
BYTE byExistSound; //是否存在声音如果为零表示不存在声音
DWORD dwSoundBuffSize; //声音缓冲区的长度
// char *cpSoundBuff; //声音缓冲区
LPDIRECTSOUNDBUFFER stpSoundBuff;
}ACT_INFO;
//3. GLB数据区结构
typedef struct
{
WORD cxImageWidth; //图像的宽度,以象素为单位
WORD cyImageHeight; //图像的高度,以象素为单位
signed short int xLeftUpX; //图像需要显示时的左上角的差值X
signed short int yLeftUpY; //图像需要显示时的左上角的差值Y
//在旧版本的GLB文件中,一个动作的所有帧(wActFrameNum * byAspectNum)的宽度和高度必
//须相同,这样将导致数据有很大的浪费,特别在动作为攻击时,如果当前人物手内握着一
//把剑,在举起剑的时候与剑落下的时候,宽度与高度的一致,将导致此动作的宽度和高度
//必须取最大宽度和高度作为大家宽度和高度,这样不但增加了数据量,而且在显示图像时
//加大了数据的传输量,也就导致了屏幕刷新率降低,占用了过多的CPU时间,所以必须,各
//自独立开来,好处多多。
DWORD dwNotAlphaImageCompressSize; //不存在Alpha通道的图像数据被
//RLE(行)压缩法压缩后的长度
WORD *wpNotAlphaImageBuff; //不存在Alpha通道的图像数据缓冲区
//在GLB文件中的图像数据全部采用RLE压缩法进行了压缩,主要为了减少数据量,加快数据
//的传输速度
DWORD dwExistAlphaImageCompressSize; //存在Alpha通道的图像数据被
//RLE(行)压缩法压缩后的长度
//如果此值为零,则表示不存在
//Alpha通道
DWORD dwAlphaCompressSize; //Alpha通道的数据被Rle(行)压缩法
//压缩后的长度
WORD *wpExistAlphaImageBuff; //存在Alpha通道的图像数据缓冲区
BYTE *bpAlphaBuff; //Alpha通道数据缓冲区
WORD wShadowImageCompressSize; //阴影的图像数据被RLE(行)压缩法压
//缩后的长度,如果此值为零,则表示
//不存在阴影
WORD cxShadowWidth; //阴影的宽度
WORD cyShadowHeight; //阴影的高度
signed short int cxShadowOffsetX; //阴影离图像左上角的偏移量X
signed short int cyShadowOffsetY; //阴影离图像左上角的偏移量Y
WORD *wpShadowImageBuff; //的图像数据缓冲区
}GLB_EACH_FRAME;
//4. 数据头结构
#define def_IMAGE_ID_SIZE 10
typedef struct
{
char szImageId[def_IMAGE_ID_SIZE]; //图像在GLB文件中的名称,最长9个字符
WORD nTotalFrame; //此套图像的总帧数
BYTE nTotalAct; //此套图像的总动作数
signed short int cxUseGrideWidth; //占用格子的宽度
signed short int cyUseGrideHeight; //占用格子的高度
ACT_INFO **stpActInfo; //动作信息,见上面“动作信息结构”
GLB_EACH_FRAME **stpEachFrame; //每一帧的数据
}GLB_DATA_HEAD;
typedef struct
{
GLB_DATA_HEAD *stpGlbImageLink; //图像缓冲区
WORD wUseNum; //使用则计数
}GLB_IMAGE_LINK; //Glb图像数据缓冲区
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -