MilkShape3D (.ms3d) 模型文件格式
#define MAX_VERTICES 65534#define MAX_TRIANGLES 65534
#define MAX_GROUPS 255
#define MAX_MATERIALS 128
#define MAX_JOINTS 128
#define MAX_TEXTURE_FILENAME_SIZE 128
#define SELECTED 1
#define HIDDEN 2
#define SELECTED2 4
#define DIRTY 8
#define ISKEY 16
#define NEWLYCREATED 32
#define MARKED 64
#define SPHEREMAP 0x80
#define HASALPHA 0x40
#define COMBINEALPHA 0x20
#define TRANSPARENCY_MODE_SIMPLE 0
#define TRANSPARENCY_MODE_DEPTHSORTEDTRIANGLES 1
#define TRANSPARENCY_MODE_ALPHAREF 2
// 文件头
struct ms3d_header_t
{
char id[10]; // 总是 "MS3D000000"
int version; // 最新版本 4
};
// 单个顶点信息
struct ms3d_vertex_t
{
unsigned char flags; // 标记 SELECTED | SELECTED2 | HIDDEN
float vertex[3]; // 顶点的3个坐标(X,Y,Z)
char boneId; // 骨骼索引, -1 = 无骨骼
unsigned char referenceCount; // 引用计数
char boneIds[3]; // 3个骨骼索引
unsigned char weights[3]; // 3个骨骼权重
unsigned int extra; // 拓展
float renderColor[3]; // 渲染颜色(Red,Greed,Blue)
};
// 单个三角片面信息
struct ms3d_triangle_t
{
unsigned short flags; // 标记 SELECTED | SELECTED2 | HIDDEN
unsigned short vertexIndices[3]; // 三角片面的3个顶点索引
float vertexNormals[3][3]; // 三角片面的3个法向量
float s[3]; // 三个顶点的纹理坐标S
float t[3]; // 三个顶点的纹理坐标T
float normal[3]; // 通过计算最终得出的三角片面法向量
unsigned char smoothingGroup; // 平滑组索引,1 - 32
unsigned char groupIndex; // 组索引
};
// 单个组信息
struct ms3d_group_t
{
unsigned char flags; // 标记 SELECTED | HIDDEN
char name[32]; // 组名称
std::vector<unsigned short> triangleIndices; // 三角形索引列表
char materialIndex; // 材质索引
std::vector<char> comment; // 注释
};
// 单个材质信息
struct ms3d_material_t
{
char name[32]; // 材质名称
float ambient[4]; // 环境光
float diffuse[4]; // 漫反射光
float specular[4]; // 镜面反射光
float emissive[4]; // 放射光
float shininess; // 高光强度(0.0f - 128.0f)
float transparency; // 透明度(0.0f - 1.0f)
unsigned char mode; // 模式(0, 1, 2 未被使用)
char texture[MAX_TEXTURE_FILENAME_SIZE]; // 纹理图片路径
char alphamap[MAX_TEXTURE_FILENAME_SIZE]; // 透明通道图片路径
unsigned char id; // 自身索引
std::vector<char> comment; // 注释
};
// 关键帧信息
struct ms3d_keyframe_t
{
float time; // 时间(秒)
float key[3]; // 键(X,Y,Z角度)
};
// 插值信息
struct ms3d_tangent_t
{
float tangentIn[3]; // ?
float tangentOut[3]; // ?
};
// 关节信息
struct ms3d_joint_t
{
unsigned char flags; // 标记 SELECTED | DIRTY
char name[32]; // 关节名称
char parentName[32]; // 父关节名称
float rot[3]; // 自身矩阵
float pos[3]; // ?
std::vector<ms3d_keyframe_t> rotationKeys; // 关键帧列表
std::vector<ms3d_keyframe_t> positionKeys; // ?
std::vector<ms3d_tangent_t> tangents; // 插值信息列表
std::vector<char> comment; // 注释
float color[3]; // 颜色(Red,Greed,Blue)
// 以下成员不会用来渲染
int parentIndex; // 父索引
float matLocalSkeleton[3][4]; // 自身骨骼矩阵
float matGlobalSkeleton[3][4]; // 全局骨骼矩阵
float matLocal[3][4]; // 自身矩阵
float matGlobal[3][4]; // 全局矩阵
};
MilkShape3D.rar
(1.73 KB)
[[it] 本帖最后由 flyue 于 2008-8-30 20:59 编辑 [/it]]