numCorners - 0: // back to 0 corners // назад к нулевому значению corners }

}

Здесь подпрограмма Sierpinski О та же самая, что и в листинге 2.6, за исключением того, что три вершины треугольника передаются в качестве параметров.

Пример 2.4.4. Создание ломаной линии с помощью мыши На рис. 2.23 показано создание ломаной линии посредством нажатия кнопки мыши. Теперь вместо того, чтобы замещать каждой новой точкой старую, мы будем сохранять все отмеченные точки для дальнейшего использования. Пользователь вводит с помощью мыши последовательность точек, и каждая из этих точек записывается в следующую имеющуюся в распоряжении ячейку массива. Если массив заполнен целиком, то следующие точки не принимаются. После каждого щелчка мышью окно очищается и вся текущая ломаная линия перерисовывается заново. При нажатии правой кнопки мыши вся ломаная уничтожается.

Френсис Хилл

Рис. 2.23. Интерактивное создание ломаной линии Листинг 2.16 иллюстрирует одну возможную реализацию этой процедуры. Отметим, что переменная last хранит последнее значение индекса, использованного в массиве List[]; она увеличивается на единицу всякий раз, когда отмечается новая точка, и устанавливается в -1 при сбросе списков. Если желательно разрешить использование точек в List вне подпрограммы myMouse[], то переменную List можно сделать глобальной.

2.4. Простое взаимодействие с помощью мыши и клавиатуры Листинг 2.16. Рисовальщик ломаной с помощью щелчков мышью

void myMouse(int button, int state, int x. int y) {

#define NUM 20

static GLintPoint List [NUM]:

static int last = -1 : // last index used so far // последний использованный индекс

// test for mouse button as well as for a full array // тест для кнопки мыши и для заполненности массива

if (button == GLUT_LEFT_BUTTON && state == GLUTJOWN && last < (NUM -1))

(

List[++last].x = x: // add new point to list // добавляем в список новую точку

List[ last].у = screenHeight - у;

glClear(GL_COLOR_BUFFER_BIT): // clear the screen // очищаем экран

gl Begin(GL_LINE_STRIP); // redraw the polyline // перерисовываем ломаную


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