for(int i = 0: i <- last: i++)

glVertex2i(List[i].x. List[i].y):

glEndO: gIFlushO:

}

else if(button - GLUT_RIGHT_BUTT0N && state " GLUTJXW last - -1: // reset the list to empty // обнуляем список }

Движение мыши Когда мышь перемещается (на расстояние, превышающее некоторое минимальное), а одна из кнопок удерживается в нажатом положении, происходит событие другого типа. Функция обратного вызова - назовем ее myMovedMouseC) - связывается с данным событием посредством подпрограммы

glutMotionFunc(myMovedMouse): Данная функция обратного вызова должна иметь два параметра, ее прототип myMovedMouseC int х, int у): значения х и у, разумеется, представляют собой позицию мыши в тот момент, когда рассматриваемое событие происходит.

Пример 2.4.5. Черчение «от руки» толстой кистью Допустим, что мы хотим создать кривую посредством плавного перемещения мыши вдоль некоторой траектории с нажатой кнопкой. Кроме того, мы хотим, чтобы эта «кисть» для рисования имела форму квадрата. Это можно осуществить, если разработать функцию myMovedMouseC), которая будет рисовать квадрат в текущей позиции мыши:

void myMovedMouse(int mouseX. int mouseY) {

GLint x = mouseX; Глава 2. Начальная стадия: рисование фигур

// grab the mouse position // перехватываем позицию мыши

GLint у - screenHeight - mouseY; // flip it as usual

// как обычно, зеркально отражаем координату у GLint brushSize - 20:

glRectiCx.y. х + brushSize. у + brushSize): glFlushO:

}

2.4.2. Взаимодействие с помощью клавиатуры Как уже указывалось ранее, нажатие клавиши на клавиатуре вызывает событие клавиатуры (keyboard event). Функция обратного вызова myKeyboardO регистрируется с данным типом события посредством подпрограммы glutKeyboardFunc(myKeyboard), которая должна иметь примерно следующий вид:

void myKeyboard(unsigned int key. int x. int у); Величина key определяется ASCII-кодом' нажатой клавиши. Величины х и у сообщают позицию мыши в момент возникновения события. (Как и раньше, у измеряется числом пикселов вниз относительно верхней стороны окна.)


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