Решение двухмерных задач, таких как построение узора Серпинского, можно рассматривать как частный случай работы в трехмерном пространстве. С точки зрения математики двухмерную плоскость или простую двухмерную криволинейную поверхность можно считать подпространством трехмерного пространства. Следовательно, выражения, справедливые для трехмерного пространства, будут справедливы и для его подпространства.
Для простоты будем считать планшет бесконечным и совместим его поверхность с плоскостью z~0. В таком случае точки р=(х, у, 0) на планшете можно рассматривать или как точки трехмерного пространства, или как точки р-(х, у) двухмерного подпространства - плоскости планшета. OpenGL, как и большинство других трехмерных графических систем, позволяет пользователю использовать любое из описанных представлений, причем внутреннее представление не зависит от той формы "внешнего" представления, которую выбрал для себя пользователь. Точку можно представить разными способами, но самый простой - рассматривать ее как триаду в трехмерном пространстве: Р =
Сейчас мы не будем обращать внимание на то, в какой системе координат задан компонент р.
В этой книге мы чаще всего будем использовать термин вершина (vertex), а не точка (point). Вершина характеризует определенное положение в пространстве, причем в компьютерной графике используются двух-, трех- и четырехмерные пространства. С точки зрения графической системы вершина представляет собой атомарный графический объект, который соответствует простейшему геометрическому объекту - точке. Двумя вершинами определя-
Графическое программирование
ется отрезок прямой - второй по простоте графический объект, тремя - треугольник и окружность, четырьмя - четырехугольник и т.д.
В OpenGL имеется множество форм представления объектов, из которых пользователь может выбирать ту, которая наилучшим образом соответствует специфике определенной задачи. Обобщенная форма представления вершины в OpenGL имеет вид
glVertex*
Здесь * можно заменить двумя или тремя символами в формате nt или ntv, где п задает количество размерностей (2, 3 или 4), t описывает тип данных: целый (integer) - i, с плавающей точкой одинарной точности (float) -f или с плавающей точкой удвоенной точности (double) - d. Третий символ v, если он присутствует в определении вершины, означает, что переменные (значения координат) задаются указателем на массив, а не списком аргументов. В дальнейшем в каждом частном случае мы будем выбирать именно ту форму представления вершины, которая наиболее подходит для данного случая. Необходимую дополнительную информацию о формах представления объектов в OpenGL читатель найдет в руководстве пользователя OpenGL Reference Manual [Оре97Ь]. Еще раз обращаю ваше внимание на то, что при любом внешнем представлении объекта (зададите вы вершину как двухмерный объект или как трехмерный) его внутреннее представление будет одним и тем же. В главе 4 мы рассмотрим четырехмерное внутреннее представление, но сейчас вам нет нужды беспокоиться об этих деталях реализации.