基本3D格式
BIM文件格式
CAD文件格式
GIS文件格式

md2文件

文件结构

md2文件是一种基于顶点动画的3D模型文件格式,其文件结构包括两部分:头部(header)和主体(body)。

头部(header)

Header占据了md2文件的前68个字节,其中包含了和整个文件相关的信息,如文件版本号、帧数和模型数据的尺寸信息等。具体结构如下:

struct header
{
    int ident;          // 文件标识
    int version;        // 文件版本号
    int skinWidth;      // 纹理图的宽度
    int skinHeight;     // 纹理图的高度
    int frameSize;      // 一帧的大小
    int numSkins;       // 纹理图数量
    int numVertices;    // 顶点数量
    int numTexcoords;   // 纹理坐标数量
    int numTriangles;   // 三角形数量
    int numGlcmds;      // OpenGL指令数量
    int numFrames;      // 帧数
    int offsetSkins;    // 纹理图数据的偏移量
    int offsetTexcoords;// 纹理坐标数据的偏移量
    int offsetTriangles;// 三角形索引数据的偏移量
    int offsetFrames;   // 模型帧数据的偏移量
    int offsetGlcmds;   // OpenGL指令数据的偏移量
    int offsetEnd;      // 文件结尾的偏移量
};

主体(body)

主体部分包含一系列的三角形数据(如纹理坐标、顶点坐标和法向量等),它们用于描述每一帧中的模型的形状和表面贴图等。主体部分的长度为 (numFrames * frameSize) + numGlcmds 张字节。

规范链接

示例文件

下面是一个示例md2文件中的主体部分的一段:

struct triangle
{
    short vertexIndices[3];     // 三个顶点的索引
    short stIndices[3];         // 三个纹理坐标的索引
};

struct frame
{
    float scale[3];             // 放缩比例
    float translate[3];         // 平移量
    char name[16];              // 模型名称(0补齐)
    struct vertex
    {
        unsigned char v[3];     // 顶点坐标[x, y, z]
        unsigned char normalIndex;  // 法向量索引
    } vertices[1];              // 模型的第一帧
};

struct vector3
{
    float x, y, z;
};

struct texcoord
{
    short s, t;
};

// 主体数据
triangle triangles[1];          // 模型的第一个三角形
vector3 vertices[1];            // 模型的第一个顶点
texcoord texcoords[1];          // 纹理坐标数组

以上仅为示例,实际的md2文件中三角形、顶点和纹理坐标等数据数量可能会更多。在读取和使用md2文件时,需要仔细阅读文件头部和文件结构,以便正确地解析和渲染数据。