QuakeIII 的 MD3模型文件 结构研究(-)

本文详细介绍了Quake III游戏中使用的MD3模型文件格式,包括头部信息、网格数据、标签结构等关键组成部分,并阐述了这些数据在3D游戏设计中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QuakeIII使用的d3模型格式是MD3的,这里研究下

看了这个清晰的结构定义以后 可以知道 从3d Max导出那些数据, 3D游戏设计的时候 也可以知道这些数据具有什么用

 


// 下面的结构体保存了从文件的头部信息
struct tMd3Header

    
char    fileID[4];                    // 文件ID,对于MD3格式的文件,必须是IDP3
    int        version;                    // MD3格式文件的版本号,必须是15
    char    strFile[68];                // 文件的名称
    int        numFrames;                    // 动画帧的数目
    int        numTags;                    // 标签的数目
    int        numMeshes;                    // 网格中子对象的数目
    int        numMaxSkins;                // 网格中皮肤的数目
    int        headerSize;                    // 文件头部大小
    int        tagStart;                    // 标签信息的开始位置
    int        tagEnd;                        // 标签信息的结束位置
    int        fileSize;                    // 文件大小
}
;

// 下面的结构体保存了MD3模型中的网格数据
struct tMd3MeshInfo
{
    
char    meshID[4];                    // 网格ID
    char    strName[68];                // 网格名称
    int        numMeshFrames;                // 帧的数目
    int        numSkins;                    // 皮肤的数目
    int     numVertices;                // 顶点数目
    int        numTriangles;                // 三角形面的数目
    int        triStart;                    // 三角形的开始位置
    int        headerSize;                    // 网格的头部数据的大小
    int     uvStart;                    // UV纹理坐标的开始位置
    int        vertexStart;                // 顶点数据的开始位置
    int        meshSize;                    // 整个网格数据的大小
}
;

//  MD3文件格式的标签结构
struct tMd3Tag
{
    
char        strName[64];            // 标签的名称
    CVector3    vPosition;                // 平移变换
    float        rotation[3][3];            // 旋转矩阵
}
;

//  下面的结构体保存了骨骼信息 
struct tMd3Bone
{
    
float    mins[3];                    // 最小值(x, y, z)
    float    maxs[3];                    // 最大值(x, y, z)
    float    position[3];                // 骨骼位置
    float    scale;                        // 骨骼缩放比例
    char    creator[16];                
}
;


//  下面的结构体保存了面的法向量和顶点索引
struct tMd3Triangle
{
   signed 
short     vertex[3];                // 面的顶点
   unsigned char normal[2];                // 法向量
}
;


//  下面的结构体保存了顶点和纹理坐标队列的索引号
struct tMd3Face
{
   
int vertexIndices[3];                
}
;


// 下面的结构体保存UV纹理坐标
struct tMd3TexCoord
{
   
float textureCoord[2];
}
;


// 下面的结构体保存皮肤名称(也就是纹理名称)
struct tMd3Skin 
{
    
char strName[68];
}
;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红火吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值