if(button -= GLUT_LEFT_BUTTON && state GLUT_D0WN)

{

corner[numCorners] .x - x:

corner[numCorners] .y - screenHeight - y; // flip у coordinate // зеркально отражаем координату у

numCorners++: // have another point // имеем другую точку

if (numCorners == 2)

{

glRecti(corner[0].x. corner[0].y. corner[l].x. corner[l].y):

numCorners =0: // back to 0 corners // назад к corners - 0 }

}

else if(button - GLUT_RIGHT && state - GLUT_D0WN) glClear(GL_COLOR_BUFFER_BIT): // clear the window // очищаем окно

glFlushO:

}

Подпрограмма, приведенная в листинге 2.15, сохраняет угловые точки в статическом (static) массиве corner[], который сделан статическим с тем, чтобы значения хранились в нем между последовательными вызовами подпрограммы. Переменная numCorners хранит информацию о том, сколько углов на данный момент обработано; как только это число достигает двух, прямоугольник рисуется, a numCorners сбрасывается в нуль.

При другом методе задания прямоугольника используется резиновый прямоугольник (rubber rectangle), размеры которого увеличиваются и уменьшаются по мере того, как пользователь перемещает мышь. Подробнее это рассматривается в разделе «Логические комбинации пиксельных карт» главы 10.

Глава 2. Начальная стадия: рисование фигур Пример 2.4.3. Управление «ковром Серпинского» с помощью мыши Нетрудно расширить возможности описанной ранее подпрограммы «ковер Серпинского» так, чтобы пользователь мог задавать все три вершины исходного треугольника с помощью мыши. Используем ту же схему, что и в предыдущем примере: поместим три точки в массив corners[] (углы) и затем, имея в наличии эти три точки, нарисуем ковер Серпинского. Тогда ядро подпрограммы myMouseC) будет выглядеть следующим образом:

static GlintPoint corners[3]: static int numCorners - 0:

if(button - GLUTLEFT BUTTON && state - GLUT DOWN) {

corner[numCorners].x - x;

corner[numCorners].y - screenHeight - y: // flip у coordinate // зеркально отражаем координату у

if(++numCorners - 3)

{

Sierpinski(corners): // draw the gasket // рисуем ковер


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