glClear( GL_C0L0R_BUFFER_BIT )
Библиотека постоянно хранит одно текущее значение каждого атрибута. Цвет рисования является атрибутом примитива, и после задания функцией glColor*() он будет присвоен всем последующим вершинам данного примитива, а также вершинам следующего примитива, пока не будет изменен новым вызовом glColor*(). Если компоненты цвета представлены в виде вещественных чисел, то они должны изменяться в диапазоне 0.0-1.0 (единица соответствует максимальной интенсивности). Для целых чисел используется диапазон от 0 до 255.
Если вершины треугольника имеют разный цвет, то при помощи функции glShadeModel () можно выбрать один из двух способов закраски. Вызов функции gl ShadeModel (GL_SM00TH) определяет градиентную закраску (закраску по Гуро) с линейным изменением кода цвета от одной вершины к другой. Вызов функции Простейшее приложение OpenGL
gl ShadeModel (GL_FLAT) задает плоскую однотонную закраску. Весь треугольник закрашивается цветом его третьей вершины. При появлении первых графических ускорителей возникали ситуации, когда рендеринг с ускорителем и без него давал разные результаты, так как программно треугольник заливался цветом одной вершины, а ускоритель использовал цвет другой вершины.
При использовании двойной буферизации после формирования изображения надо переключить страницы при помощи функции SwapBuffers(HDC).
Чтобы не хранить глобальную переменную hDC, текущий контекст можно запросить при помощи функции wglGetCurrentDCC ) (с префикса wgl начинаются имена функций, добавленных в стандартный язык OpenGL для адаптации к среде Windows).
Таким образом, простейшая функция (см. проект OpenGL_minim), которая выводит на экран два треугольника, потом изменяет заданную по умолчанию область вывода и повторно выводит треугольники с теми же координатами, будет выглядеть так, как показано в листинге 22.4.
Листинг 22.4
void RenderOCHWND hWnd) {
RECT R;
GetClientRect(hWnd.&R);
gl ViewportCO.O.R.right.R.bottom);
glShadeModel (GL_FLAT); //Задание однотонной закраски граней. glClearColor(0.9f,0.9f,0.9f.l.Of): //Задание цвета фона gl Cl ear( GL_COLOR_BUFFER_BIT); //Очистка экрана. glBegin(GL_TRIANGLES); //Начало вывода примитивов glColor3d (0.0. 1.0. 0.0); //Первый треугольник -glVertex3d(0.25.0.0. 0.0):