سلام
خیلی ممنون.
می تونم راهنماییتان کنم ولی اینکه یه مقاله کامل بنویسم نمی تونم راستش من خودم از هر کسی بیشتر به کمک نیاز دارم چون همه می دونن که یه گیم انجین رو نمی شه تنهایی ساخت حداقل نتونستم یه تیمه دو نفره درست کنم به خاطر همین هم نمی تونم مقاله بنویسم یعنی وقت کم دارم من خودم نحوه ساخت رو از کتاب focus on 3d models یاد گرفتم و حالا توضیحاتی می دم که بیشتر بتونیم با این فرمت اشنا بشیم.
1. فایل رو لود می کنیم
2. 10 بایت اول باید MS3D000000 باشد مگر نه فایل در فرمت MS3D نیست.
3. 4 بایت بعدی ورژن فایل هست که ما فقط از 3 و 4 پشتیبانی می کنیم.
4. 2 بایت بعدی تعداد نقاط هست که بر اساس اون نقاط مدل رو می خونیم برای هر نقطه 15 بایت اطلاعات هست که استراکت زیر ترتیب اونها رو نشون می ده.
// MS3D Vertex Struct
struct ms3dVertex
{
u8 m_ucFlags; //Editor flags, unused for the loader
Vertex3 m_vVert; //X,Y,Z coordinates
char m_cBone; //Bone ID (-1 = no bone)
u8 m_ucUnused;
}; // ms3dVertex
که اولی برای استفاده ادیتور یعنی خود میلک شیپ هست که اگه 0 بود یعنی انتخاب نشده 1 بود یعنی انتخاب هست 2 یعنی مخی و 3 هم یعنی هم انتخاب شده و هم مخفی.
5. دو بایت بعدی تعداد مثلث ها هست.
که باید بر حسب اون تمام مثلث ها رو بخونید که اون هم از روی استراکت زیر می تونید بخونید.
// MS3D Triangle data structure
struct ms3dTriangle
{
u16 m_usFlags; //Editor flags
u16 m_usVertIndices[3]; //Vertex indexes
Vertex3 m_vNormals[3]; //Vertex normals;
float m_fTexCoords[2][3]; //Texture coordinates
u8 m_ucSmoothing; //Smoothing group
u8 m_ucGroup; //Group index
};
6. دو بایت بعدی هم تعداد گروه مش ها رو نشون می ده که هر کردوم یه قسمت از مدل هست مثلا یکی برای سر و یکی برای دست که البته این بستگی به سازنده مدل داره که چه طوری اونو ساخته باشه.
// Group of triangles in the ms3d file
struct ms3dGroup
{
u8 m_ucFlags; //Editor flags again
char m_cName[32]; //Name of the mesh
u16 m_usNumTris; //Number of triangles in the group
u16* m_uspIndices; //Triangle indexes
char m_cMaterial; //Material index, -1 = no material
//Let it clean up after itself like usual
ms3dGroup()
{
m_uspIndices = 0;
}
~ms3dGroup()
{
if(m_uspIndices)
{
delete [] m_uspIndices;
m_uspIndices = 0;
}
}
};
که تو این یکی باید اول تعداد مثلث ها رو بخونید بعد اندیس مثلث ها رو بخونید.
7. 2 بایت بعدی هم که تعداد متریال ها هست که استراکت اون هم این طوری هست.
// Material information for the mesh
struct ms3dMaterial
{
char m_cName[32]; //Material name
float m_fAmbient[4]; //Ambient values
float m_fDiffuse[4]; //Diffuse values
float m_fSpecular[4]; //Specular values
float m_fEmissive[4]; //Emissive values
float m_fShininess; //0 - 128
float m_fTransparency; //0 - 1
char m_cMode; //unused
char m_cTexture[128]; //Texture map file
char m_cAlpha[128]; //Alpha map file
};
بقیه فایل هم مربوط به انیمیشن هست که خودم هم هنوز نمی دونم چه طوری هست.