Насчет 3DS хотел сделать несколько замечаний (я как раз с ним маюсь). Он стоит из кусов (chunk):
//- S3dsChunkHeader
//- Header for each chunk
struct S3dsChunkHeader
{
unsigned short m_usID;
unsigned int m_uiLength;
};
Лучше всего в эту структуру добавить:
struct S3dsChunkHeader
{
unsigned short m_usID;
unsigned int m_uiLength;
char body_chuck[1]; ---- ВОТ ЭТО!!!!!
};
Тогда по body_chuck можно ссылать на содержимое куска. Например, так:
strcpy(m_vMaterials[iCurMat]->m_cName, (char *)subChunk->body_chuck);
или даже так:
unsigned short usNumVerts = *(unsigned short *)subChunk->body_chuck;
еще интереснее:
unsigned short * p_wrd = (unsigned short *)&subChunk->body_chuck;
или
float * p_flt = (float *)&subChunk->body_chuck;
тогда можно например вот так написать:
m_vMeshes[iCurMesh]->m_vVertices[x]->m_fVert[0] = p_flt [0];
Хороший исходник по разборке 3DS и MDL есть в IS_engine (сайта я его не нашел, но исходники есть, если надо могу выложить):
http://www.garagegames.com/index.php?se ... ew&qid=506
Вот как там выводиться меш:
glDrawElements(GL_TRIANGLES, Objects[i].MatFaces[j].numSubFaces, GL_UNSIGNED_SHORT, Objects[i].MatFaces[j].subFaces);
Но вот описания по MDL я так и не нашел.