Другой метод генерации виртуальных сцен - отобразить стереографические проекции на растровом мониторе с двумя такими же проекциями, отображаемыми в чередующихся циклах обновления. Далее сцену можно наблюдать сквозь стереографические очки. Интерактивную манипуляцию объектами можно выполнить с помощью “информационной” перчатки и устройства слежения, позволяющего контролировать положение и ориентацию перчатки относительно положения объектов на сцене.
ИНТЕРАКТИВНЫЕ ФУНКЦИИ УСТРОЙСТВ ВВОДА OpenGL
Поскольку процедуры интерактивного ввода устройствами в программе OpenGL требуют сопряжения с системой окон, такой ввод обрабатывается с помощью процедур из Utility Toolkit (GLUT). В GLUT есть функции для получения входа от стандартных устройств, таких как мышь или клавиатура, а также от планшетов, спейсболов, полей
Рис. 11.12. Используя головной стереодисплей сопровождения, именуемый BOOM (Fake Space Labs, Inc.), и информационную перчатку Dataglove (VPL, Inc.), исследователь интерактивно манипулирует исследовательскими зондами в нестационарном потоке вблизи реактивного самолета Харриэр. Программное обеспечение разработал Стив Брисон (Steve Bryson); данные предоставлены Harrier (перепечатано с разрешения Сэма Юзлтона (Sam Uselton), NASA Ames Research Center)
клавиш и наборных дисков. Для каждого устройства задается процедура (функция обратного вызова), которая будет вызываться всякий раз при наступлении события ввода от этого устройства. Данные команды GLUT размещаются в главной процедуре вместе с другими операторами GLUT. Кроме того, объединяя функции из основной библиотеки и библиотеки GLUT, можно реализовать обработку с помощью мыши (GLUT) данных, введенных с помощью указки.
ФУНКЦИИ GLUT (МЫШЬ)
Чтобы задать (“зарегистрировать”) процедуру, вызываемую, когда указатель мыши находится в окне на экране дисплея и нажимается или отпускается клавиша мыши, используется следующая функция.
glutMouseFunc (mouseFcn); Эта функция обратного вызова процедуры mouseFcn, имеющей четыре аргумента:
void mouseFcn (GLint button, GLint action, GLint xMouse,
GLint yMouse)
Параметру button присваивается значение символьной константы GLUT, обозначающей одну из трех кнопок мыши, а параметру action присваивается символьная константа, определяющая, какое действие мы хотим использовать, чтобы запустить событие активизации мыши. Допустимыми значениями button являются GLUTLEFTBUTTON, GLUT MIDDLE BUTTON и GLUT RIGHT BUTTON. (Если есть только двухкнопочная мышь, то применяются только обозначения для левой и правой кнопок; при использовании однокнопочной мыши параметру button можно присвоить только значение GLUT_LEFT_BUTTON.) Действием, связанным с параметром, может быть GLUT_DOWN или GLUT_UP в зависимости от того, когда нужно инициировать действия - при нажатии или при отпускании клавиши. При вызове процедуры mouse Fen положение курсора мыши в окне на экране дисплея возвращается как координата (xMouse, yMouse). Это положение отсчитывается от верхнего левого угла окна на экране дисплея, так что xMouse - это расстояние (в пикселях) от левого края окна на экране дисплея, a yMouse - расстояние (в пикселях) вниз от вершины окна на экране дисплея.