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



     олигофруктоза купить |         

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


       delete[] pBuffer;

 

       return true;

}

Последний фрагмент освобождает память временного буфера, когда вся информация уже скопирована и работа

процедуры завершена успешно.

Итак, в данный момент, защищенные члены класса Model заполнены информацией о модели. Заметьте, что это только код для MilkshapeModel, потому что все это относилось к специфике Milkshape3D. Теперь, перед тем как можно будет нарисовать модель, необходимо загрузить текстуры для всех материалов. Это мы сделаем в следующем куске кода:

void Model::reloadTextures()

{

       for ( int i = 0; i < m_numMaterials; i++ )

              if ( strlen( m_pMaterials[i].m_pTextureFilename ) > 0 )

                    m_pMaterials[i].m_texture = LoadGLTexture( m_pMaterials[i].m_pTextureFilename );

              else

                    m_pMaterials[i].m_texture = 0;

}

Для каждого материала, текстура загружается, используя функцию из основных уроков NeHe (слегка измененных в отличие от предыдущих версий). Если имя файла с текстурой - пустая строка, то текстура не загружается, но взамен текстуре объекта присваивается 0, что означает, что нет никакой текстуры.

Код - рисование модели

Теперь можем начать код, рисующий модель! Теперь это совсем  не сложно, когда у нас есть аккуратно расположенные структуры данных в памяти.

void Model::draw()

{

       GLboolean texEnabled = glIsEnabled( GL_TEXTURE_2D );

 

Эта часть сохраняет состояние отображения текстур в OpenGL, поэтому функция не нарушит его. Заметьте, что она не сохраняет так же свойства материала.

Теперь цикл рисования каждой сетки по отдельности:

       // Рисовать по группам

       for ( int i = 0; i < m_numMeshes; i++ )

       {

m_pMeshes[i] будет использован для ссылки на текущую сетку. Теперь, каждая сетка имеет свои свойства материала, поэтому мы устанавливаем соответствующее состояние OpenGL. Если, однако, materialIndex сетки равен -1, это значит, что материала для такой сетки нет, и она рисуется в стандартном виде OpenGL.




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