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



             

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


// Свойства материала

struct Material

{

       float m_ambient[4], m_diffuse[4], m_specular[4], m_emissive[4];

       float m_shininess;

       GLuint m_texture;

       char *m_pTextureFilename;

};

// Используемые материалы

int m_numMaterials;

Material *m_pMaterials;

 

Здесь есть все стандартные коэффициенты освещения в таком же формате, как и в OpenGL: окружающий, рассеивающий, отражающий, испускающий и блестящий. У нас так же есть объект текстуры m_texture и имя файла (динамически располагаемое) текстуры, которые могут быть выгружены, если контекст OpenGL упадет.

Код - загрузка модели

Теперь займемся загрузкой модели. Вы увидите, что это чистая виртуальная функция, названная loadModelData, которая в качестве параметра имеет имя файла модели. Все что мы сделаем - это создадим производный класс MilkshapeModel, который использует эту функцию, которая заполняет защищенные структуры данных, упомянутые выше. Теперь посмотрим на функцию:

bool MilkshapeModel::loadModelData( const char *filename )

{

       ifstream inputFile( filename, ios::in | ios::binary | ios::nocreate );

       if ( inputFile.fail())

              return false; // "Не можем открыть файл с моделью."

Для начала мы открыли файл. Это бинарный файл, поэтому используем ios::binary. Если файл не найден, функция возвратит false, что говорит об ошибке.

       inputFile.seekg( 0, ios::end );

       long fileSize = inputFile.tellg();

       inputFile.seekg( 0, ios::beg );

 

Код дальше определяет размер файла в байтах.

       byte *pBuffer = new byte[fileSize];

       inputFile.read( pBuffer, fileSize );

       inputFile.close();

Затем файл читается во временный буфер целиком.

       const byte *pPtr = pBuffer;

       MS3DHeader *pHeader = ( MS3DHeader* )pPtr;

       pPtr += sizeof( MS3DHeader );

 

       if ( strncmp( pHeader->m_ID, "MS3D000000", 10 ) != 0 )

              return false; // "Не настоящий Milkshape3D файл."




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