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 для того, чтобы перейти в полноэкранный режим. Повторите это действие несколько раз.
До сих пор внутренние области всех геометрических примитивов либо заполнялись одним и тем же, сплошным цветом, либо оттенялись цветом собственных вершин в режиме интерполяции цветов. Однако существует еще один способ заполнения примитивов, с помощью текстурных отображений. Текстура — это bitmap-изображение, накладываемое, а точнее, по довольно сложному алгоритму отображаемое на поверхность геометрического примитива для создания эффекта реального (или нереального) материала, из которого объект изготовлен. Фактура реального материала часто имитируется одним и тем же, но повторяющимся изображением.
На деле текстура — это массив данных, описывающих прямоугольную поверхность. Элементы этого массива иногда называют текселами (texels). Основным достоинством алгоритмов обработки текстур является то, что они позволяют отобразить текстуру и на непрямоугольную область. Следующая серия рисунков иллюстрирует эту технику. Сначала из bmp-файла загружается обычное прямоугольное растровое изображение.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.