Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Компьютерная графика. Создание цикла обработки сообщений в приложении средствами библиотеки OpenGL




Речь идет об объектно-ориентрованном программировании, а не о структурном. Создается цикл обработки сообщений. Стартовой точкой выполнения программы является функция main(). В функции main() есть функция, которая запускает цикл обработки сообщений glutMainLoop(). В разные службы направляет сообщения. Цикл обработки выступает как разносчик сообщений и устанавливает очередь сообщения. Сообщения могут накапливаться в разных буферах.

Обработчик сообщений подбирает, кто ответственен за эти сообщения. Заранее известно кто будет обрабатывать сообщения (например: отвечать за клики мыши). Функции библиотеки GLUT реализуют так называемый событийно-управляемый механизм. Это означает, что есть некоторый внутренний цикл, который запускается после соответствующей инициализации и обрабатывает, одно за другим, все события, объявленные во время инициализации. К событиям относятся: щелчок мыши, закрытие окна, изменение свойств окна, передвижение курсора, нажатие клавиши, и "пустое" (idle) событие, когда ничего не происходит. Для этого используются функции вида:

• void glutDisplayFunc (void (*func) (void)) - функция рисования для окна приложения, которая вызывается при необходимости создания или восстановления изображения

• void glutReshapeFunc (void (*func) (int width, int height)) - функция обработки изменения размеров окна пользователем

• void glutMouseFunc (void (*func) (int button, int state, int x, int y)) - функция для регистрации действий мыши

• void glutIdleFunc (void (*func) (void)) - функцию, которая будет вызываться каждый раз, когда нет событий от пользователя

Контроль всех событий происходит внутри бесконечного цикла в функции void glutMainLoop(void) которая обычно вызывается в конце любой программы, использующей GLUT.

Но и у разработчика приложения есть возможность на себя перехватить инициативу обработки сообщения. Для этого регистрируем в функции main idle (пустое событие) - тогда сами можем обрабатывать сообщения, а не windows.

Выход из цикла – клавиша ESC.

 

void main(int argc, char *argv[]) //главный цикл приложения

{

glutInit(&argc, argv); //производит начальную инициализацию библиотеки GLUT.

glutInitDisplayMode(GLUT_RGB); //инициализирует буфер кадра и настраивает полноцветный непалитровый) режим RGB.

glutInitWindowSize(Width, Height); //используется для задания начальных размеров окна.

 

glutCreateWindow("timerAW"); // задает заголовок окна и визуализирует само окно на экране.

glutDisplayFunc(Display); //регистрирует функцию Display(), которая будет вызвана при перерисовке окна.

// initAW();

glutReshapeFunc(Reshape); //регистрирует функцию Reshape(), которая будет вызвана при изменении размеров окна.

glutKeyboardFunc(Keyboard); //регистрирует функцию Keyboard(), которая будет вызвана при нажатии клавиши на клавиатуре.

glutTimerFunc(200, timAW, 0); // a=1;

glutMainLoop(); //Внутри бесконечного цикла в этой функции происходит контроль всех событий и вызов нужных функций.

}


Поделиться:

Дата добавления: 2015-04-18; просмотров: 135; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.011 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты