case 'О':

glTranslatef(0.5, 0.5, 0.0); /* Передвинуть в центр */ glBegin(GL_QUAD_STRIP);

for (i=0; i<=12; i++) /* 12 вершин */

{

angle = 3.14159/6.0*i; /* 30 градусов в радианах */ glVertex2f(0.4*cos(angle), 0.4*sin(angle)); glVertex2f(0.5*cos(angle), 0.5*sin(angle));

}
glEnd();

glTranslatef(0.5, -0.5, 0.0); /* Передвинуть в правый нижний угол */ break; Глава S. Ввод и взаимодействие с пользователем В этом фрагменте окружность (точнее, две концентрические окружности) аппроксимируется 12 четырехугольниками (полосой из 12 участков). Каждый прямоугольник будет залит в соответствии с текущими значениями атрибутов. Поскольку мы еще не рассматривали методы выполнения геометрических преобразований - это материал главы 4, - придется объяснить суть используемых в этом фрагменте формул. Все преобразования выполняются с двухмерными объектами. Следовательно, каждый из них определен на плоскости z=0 и можно использовать любую систему координат для его описания. Предполагается, что каждый объект (символ шрифта, включая и межсимвольный интервал) вписан в прямоугольник5. Обычно отображение строки символов начинается с левого нижнего угла первого из них. Следующий символ размещается таким образом, что его левый нижний угол совпадает с правым нижним углом предыдущего символа.

Первый вызов функции glTranslatef () в приведенном фрагменте задает смещение в центр прямоугольника, который в данном случае совпадает с центром окружности. Можно считать, что функция glTranslatef () сдвигает начало текущей системы координат, т.е. системы, в которой будут отсчи-тываться координаты всех последующих графических объектов. Затем формируются вершины, расположенные вдоль двух концентрических окружностей, одна из которых имеет радиус 0.5, а вторая- 0.4 (рис. 3.15). После того как таким способом будут сформированы 12 четырехугольников, начало системы координат переносится в правый нижний угол. В результате все готово к вычерчиванию следующего символа, начиная с правого нижнего угла только что вычерченного. Обратите внимание- в этом примере нам не пришлось обращаться к стекам матриц и атрибутов. Другие символы формируются по этой же схеме.


⇐ Предыдущая| |Следующая ⇒