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

             

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


                           

1.0f-pTriangle->m_t[2] };

              memcpy( m_pTriangles[i].m_vertexNormals, pTriangle->m_vertexNormals,

                           

sizeof( float )*3*3 );

              memcpy( m_pTriangles[i].m_s, pTriangle->m_s, sizeof( float )*3 );

              memcpy( m_pTriangles[i].m_t, t, sizeof( float )*3 );

              memcpy( m_pTriangles[i].m_vertexIndices, vertexIndices, sizeof( int )*3 );

              pPtr += sizeof( MS3DTriangle );

       }

Так же как и для вершин, эта часть функции сохраняет все треугольники модели. Пока что она включает просто копирование массивов из одной структуры в другую, и вы увидите разницу между массивом vertexIndeces и t-массивами. В файле номера вершин хранятся как массив переменных типа word, в модели это переменные типа int для согласованности и простоты (при этом противное приведение не нужно). Итак просто нужно привести 3 значения к типу int. Все значения t  задаются как 1.0 - (оригинальное значение).  Причина этого в том, что OpenGL использует левую нижнюю систему координат, тогда как Milkshape использует правую верхнюю систему координат (прим.: имеется в виду расположение точки центра системы координат и ориентация) для работы с текстурой. Это меняет направление оси y.

       int nGroups = *( word* )pPtr;

       m_numMeshes = nGroups;

       m_pMeshes = new Mesh[nGroups];

       pPtr += sizeof( word );

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

       {

              pPtr += sizeof( byte );     // Флаги

              pPtr += 32;           // Имя

 

              word nTriangles = *( word* )pPtr;

              pPtr += sizeof( word );

              int *pTriangleIndices = new int[nTriangles];

              for ( int j = 0; j < nTriangles; j++ )

              {

                    pTriangleIndices[j] = *( word* )pPtr;

                    pPtr += sizeof( word );

              }

 

              char materialIndex = *( char* )pPtr;

              pPtr += sizeof( char );




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