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

         

Здесь есть все стандартные коэффициенты


// Свойства материала
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 файл."

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







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий