Каркас Windows-приложения. Особенности нового каркаса. Перемещение в пространстве (с текстурированными стенами), страница 5

glEnd();

glLoadIdentity();         // Reset The Current Modelview Matrix

glTranslatef (1.5f, 0, -7);    // Move Right 1.5 Units And Into The Screen 7.0

glRotatef (angleQuad, 1, 1, 1);    // Rotate The Quad On The X axis

glBegin(GL_QUADS);        // Draw A Quad

glColor3f (0, 1, 0);    // Set The Color To Blue

glVertex3f (1, 1,-1);   // Top Right Of The Quad (Top)

glVertex3f (-1, 1,-1);    // Top Left Of The Quad (Top)

glVertex3f (-1, 1, 1);    // Bottom Left Of The Quad (Top)

glVertex3f (1, 1, 1);   // Bottom Right Of The Quad (Top)

glColor3f (1, 0.5f, 0);   // Set The Color To Orange

glVertex3f ( 1,-1, 1);    // Top Right Of The Quad (Bottom)

glVertex3f (-1,-1, 1);    // Top Left Of The Quad (Bottom)

glVertex3f (-1,-1,-1);    // Bottom Left Of The Quad (Bottom)

glVertex3f ( 1,-1,-1);    // Bottom Right Of The Quad (Bottom)

glColor3f (1, 0, 0);    // Set The Color To Red

glVertex3f ( 1, 1, 1);    // Top Right Of The Quad (Front)

glVertex3f (-1, 1, 1);    // Top Left Of The Quad (Front)

glVertex3f (-1,-1, 1);    // Bottom Left Of The Quad (Front)

glVertex3f ( 1,-1, 1);    // Bottom Right Of The Quad (Front)

glColor3f (1, 1, 0);    // Set The Color To Yellow

glVertex3f ( 1,-1,-1);    // Top Right Of The Quad (Back)

glVertex3f (-1,-1,-1);    // Top Left Of The Quad (Back)

glVertex3f (-1, 1,-1);    // Bottom Left Of The Quad (Back)

glVertex3f ( 1, 1,-1);    // Bottom Right Of The Quad (Back)

glColor3f (0, 0, 1);    // Set The Color To Blue

glVertex3f (-1, 1, 1);    // Top Right Of The Quad (Left)

glVertex3f (-1, 1,-1);    // Top Left Of The Quad (Left)

glVertex3f (-1,-1,-1);    // Bottom Left Of The Quad (Left)

glVertex3f (-1,-1, 1);    // Bottom Right Of The Quad (Left)

glColor3f (1,0,1);      // Set The Color To Violet

glVertex3f (1, 1,-1);   // Top Right Of The Quad (Right)

glVertex3f (1, 1, 1);   // Top Left Of The Quad (Right)

glVertex3f (1,-1, 1);   // Bottom Left Of The Quad (Right)

glVertex3f (1,-1,-1);   // Bottom Right Of The Quad (Right)

glEnd();

angleTria += 0.2f;          // Increase The Rotation Variable For The Triangle

angleQuad -= 0.15f;         // Decrease The Rotation Variable For The Quad

}

void Update (DWORD ms) // Perform Motion Updates Here

{

if (gInfo.keys[VK_ESCAPE])

{

gInfo.bQuit = true;

PostMessage (gInfo.hWnd, WM_QUIT, 0, 0);

}

if (gInfo.keys[VK_F1])

PostMessage (gInfo.hWnd, WM_TOGGLEFULLSCREEN, 0, 0);

}

void Deinitialize ()  // Performs All Your DeInitialization

{

}

Обратите внимание на то, что глобальный объект gInfo, созданный в первом модуле, используется во втором. Он позволяет передавать настройки и стандартным способом управлять различными пользовательскими модулями. Вскоре мы будем их менять, как перчатки.

В функции Draw углы поворота объектов изменяются. Именно по этой причине, а также потому, что функция Draw вызывается внутри цикла обработки сообщений (см. файл NeHe.cpp), изображение непрерывно вращается. Запустите и проверьте. Нажмите клавишу F1 для того, чтобы перейти в полноэкранный режим. Повторите это действие несколько раз.

Текстурные отображения (Texture Mapping)

До сих пор внутренние области всех геометрических примитивов либо заполнялись одним и тем же, сплошным цветом, либо оттенялись цветом собственных вершин в режиме интерполяции цветов. Однако существует еще один способ заполнения примитивов, с помощью текстурных отображений. Текстура — это bitmap-изображение, накладываемое, а точнее, по довольно сложному алгоритму отображаемое на поверхность геометрического примитива для создания эффекта реального (или нереального) материала, из которого объект изготовлен. Фактура реального материала часто имитируется одним и тем же, но повторяющимся изображением.

На деле текстура — это массив данных, описывающих прямоугольную поверхность. Элементы этого массива иногда называют текселами (texels). Основным достоинством алгоритмов обработки текстур является то, что они позволяют отобразить текстуру и на непрямоугольную область. Следующая серия рисунков иллюстрирует эту технику. Сначала из bmp-файла загружается обычное прямоугольное растровое изображение.