При программировании на языке OpenGL мы часто будем пользоваться базовыми типами переменных - GLf loat и GLint, - а не основными типами переменных языка С, такими как float и int. Эти типы определены в соответствующем заголовочном файле с помощью директивы tdef ine, например, так:
#define GLfloat float
Использование специализированных типов переменных в OpenGL обеспечивает дополнительную гибкость, поскольку позволяет переопределять эти типы (например, заменить формат числа с одинарной точностью на формат с удвоенной точностью) и изменять таким образом точность вычислений, не изменяя текст прикладной программы.
Вернемся к функции определения вершины. Форма
glVertex2i(GLint xi, GLint yi)
подходит для представления вершины на двухмерной плоскости, причем координатами являются целые числа. Представление
glVertex3f(GLfloat х, GLfloat у, GLfloat z)
задает вершину в трехмерном пространстве, причем значения координат будут представлены вещественными числами одинарной точности с плавающей точкой. Можно использовать для задания координат и массив. Сначала нужно определить массив значений координат:
GLfloat vertex[3];
а затем задать вершину в приведенном ниже формате:
glVertex3fv(vertex);
Набор вершин позволяет описать разнообразные геометрические объекты, причем для каждого вида объектов требуется определенное количество вершин. Язык OpenGL позволяет сгруппировать любое количество вершин в описании объекта с помощью пары связанных функций glBegin() и glEnd(). Аргумент функции glBegin() задает тип геометрического объекта, который определяется следующим далее набором вершин. Например, отрезок прямой задается следующим фрагментом программы:
2.1. Узор Серпинского
glBegin(GL_LINES);
glVertex2f(xl,yl);
glVertex2f(x2,y2); glEnd();
Те же вершины позволяют определить и пару геометрических объектов - точек:
glBegin(GL_POINTS);
glVertex2f(xl,yl);
glVertex2f(х2,у2); glEndO; Теперь можно приступить и к разработке программы, формирующей узор Серпинского. Будем считать, что все точки узора должны располагаться внутри единичного квадрата, левый нижний угол которого находится в точке (0, 0), - это обычный вариант, который при желании легко можно изменить.