Народный учебник по OpenGL

             

Урок 31. Визуализация моделей Milkshape 3D - часть 4


 

       if ( pHeader->m_version < 3 || pHeader->m_version > 4 )

              return false; // "Не поддерживаемая версия.

                           

//   Поддерживается только Milkshape3D версии 1.3 и 1.4."

Теперь указатель pPtr будет указывать на текущую позицию. Сохраняем указатель на заголовок и устанавливаем pPtr на конец заголовка.  Вы, наверное, заметили несколько структур MS3D, которые мы использовали. Они объявлены в начале MilkshapeModel.cpp и идут прямо из спецификации формата файла. Поля в заголовке проверяются, что бы убедиться, в правильности загружаемого файла.

       int nVertices = *( word* )pPtr;

       m_numVertices = nVertices;

       m_pVertices = new Vertex[nVertices];

       pPtr += sizeof( word );

 

       int i;

       for ( i = 0; i < nVertices; i++ )

       {

              MS3DVertex *pVertex = ( MS3DVertex* )pPtr;

              m_pVertices[i].m_boneID = pVertex->m_boneID;

              memcpy( m_pVertices[i].m_location, pVertex->m_vertex, sizeof( float )*3 );

              pPtr += sizeof( MS3DVertex );

       }

Текст выше читает каждую структуру вершины из файла. Начальная память для модели выделяется для вершин, а затем каждая вершина копируется, пока не будут обработаны все. В функции используются несколько вызовов memcpy которая просто копирует содержимое маленьких массивов. Член m_boneID пока по-прежнему игнорируется - он для скелетной анимации!

       int nTriangles = *( word* )pPtr;

       m_numTriangles = nTriangles;

       m_pTriangles = new Triangle[nTriangles];

       pPtr += sizeof( word );

 

       for ( i = 0; i < nTriangles; i++ )

       {

              MS3DTriangle *pTriangle = ( MS3DTriangle* )pPtr;

              int vertexIndices[3] = { pTriangle->m_vertexIndices[0],

                           

pTriangle->m_vertexIndices[1], pTriangle->m_vertexIndices[2] };

              float t[3] = { 1.0f-pTriangle->m_t[0], 1.0f-pTriangle->m_t[1],




Содержание  Назад  Вперед