Структура консольного приложения
Структура консольного приложения
Будем рассматривать построение консольного приложения при помощи библиотеки GLUT или GL Utility Toolkit, получившей в последнее время широкое распространение. Эта библиотека обеспечивает единый интерфейс для работы с окнами вне зависимости от платформы, поэтому описываемая ниже структура приложения остается неизменной для операционных систем Windows, Linux и многих других.
Функции GLUT могут быть классифицированы на несколько групп по своему назначению:
· Инициализация
· Начало обработки событий
· Управление окнами
· Управление меню
· Регистрация вызываемых (callback) функций
· Управление индексированной палитрой цветов
· Отображение шрифтов
· Отображение дополнительных геометрических фигур(тор, конус и др.)
Инициализация проводится с помощью функции glutInit(int *argcp, char **argv)
Переменная argcp есть указатель на стандартную переменную argc описываемую в функции main(), а argv- указатель на параметры, передаваемые программе при запуске, который описывается там же. Эта функция проводит необходимые начальные действия для построения окна приложения, и только несколько функций GLUT могут быть вызваны до нее. К ним относятся:
glutInitWindowPosition(int x, int y)
glutInitWindowSize(int width, int height)
glutInitDisplayMode(unsigned int mode)
Первые две функции задают соответственно положение и размер окна, а последняя функция определяет различные режимы отображения информации, которые могут совместно задаваться с использованием операции побитового “или”(|):
GLUT_RGBA Режим RGBA. Используется по умолчанию, если не указаны явно режимы GLUT_RGBA или GLUT_INDEX.
GLUT_RGB То же, что и GLUT_RGBA.
GLUT_INDEX Режим индексированных цветов (использование палитры). Отменяет GLUT_RGBA.
GLUT_SINGLE Окно с одиночным буфером. Используется по умолчанию.
GLUT_DOUBLE Окно с двойным буфером. Отменяет GLUT_SINGLE.
GLUT_DEPTH Окно с буфером глубины.
Это неполный список параметров для данной функции, однако для большинства случаев этого бывает достаточно.
Двойной буфер обычно используют для анимации, сначала рисуя что-нибудь в одном буфере, а затем меняя их местами, что позволяет избежать мерцания. Буфер глубины или z-буфер используется для удаления невидимых линий и поверхностей.
Функции библиотеки 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))
То есть параметром для них является имя соответствующей функции заданного типа. С помощью glutDisplayFunc() задается функция рисования для окна приложения, которая вызывается при необходимости создания или восстановления изображения. Для явного указания, что окно надо обновить, иногда удобно использовать функцию void glutPostRedisplay(void)
Через glutReshapeFunc() устанавливается функция обработки изменения размеров окна пользователем, которой передаются новые размеры.
glutMouseFunc() определяет обработчика команд от мыши, а glutIdleFunc() задает функцию, которая будет вызываться каждый раз, когда нет событий от пользователя.
Контроль всех событий происходит внутри бесконечного цикла в функции void glutMainLoop(void) которая обычно вызывается в конце любой программы, использующей GLUT.
Структура приложения, использующего анимацию, будет следующей:
#include <GL/glut.h>
void MyIdle(void) {
//--Код, который меняет переменные, определяющие следующий кадр--//
....
};
void MyDisplay(void) {
//--Код OpenGL, который отображает кадр --//
....
//-- После рисования переставляем буфера --//
glutSwapBuffers();
};
void main(int argcp, char **argv) {
//-- Инициализация GLUT --//
glutInit(&argcp, argv);
glutInitWindowSize(640, 480);
glutInitWindowPosition(0, 0);
//--Открытие окна--//
glutCreateWindow("My OpenGL Application");
//-- Выбор режима:Двойной буфер и RGBA цвета --//
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
//-- Регистрация вызываемых функций --//
glutDisplayFunc(MyDisplay);
glutIdleFunc(MyIdle);
//-- Запуск механизма обработки событий --//
glutMainLoop();
};
Этот шаблон используется в тексте приложения, использующего OpenGL, который приводится в конце этого пособия.
В случае, если приложение должно строить статичное изображение, можно заменить GLUT_DOUBLE на GLUT_SINGLE, так как одного буфера в этом случае будет достаточно, и убрать вызов функции glutIdleFunc().
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Структура
Структура Еще в 2005 году компания Google провела ряд исследований, чтобы обнаружить, какие именно низко висящие плоды можно найти на тропках веба (http://code.google.com/webstats/).Парсер осмотрел более миллиарда веб-страниц и разметил самые частые названия классов. Результаты не принесли
Структура bio
Структура bio Основным контейнером для операций ввода-вывода в ядре является структура bio, которая определена в файле <linux/bio.h>. Эта структура представляет активные операции блочного ввода-вывода в виде списка сегментов (segment). Сегмент — это участок буфера, который
1.2 СТРУКТУРА СИСТЕМЫ
1.2 СТРУКТУРА СИСТЕМЫ На Рисунке 1.1 изображена архитектура верхнего уровня системы UNIX. Технические средства, показанные в центре диаграммы, выполняют функции, обеспечивающие функционирование операционной системы и перечисленные в разделе 1.5. Операционная система
Структура
Структура Первое, с чего следует начинать планирование, – это структура сайта. Структура главным образом определяется содержимым сайта и должна обеспечивать удобство доступа к нужной информации. Если неправильно выбрать структуру, то пользователь может очень быстро
Структура
Структура Одно из основных отличий хорошего резюме от плохого – это лаконичность. Работодатели – люди, как правило, занятые, а писем, подобных вашему, им предстоит прочесть не один десяток, и тратить свое время на изучение вашей подробной биографии они наверняка не будут.
8.1.1. Структура
8.1.1. Структура Это – структура, которой следуют все сценарии в этом руководстве. Если вы обнаружите, что это не так, то скорее всего это моя ошибка, если конечно я не объяснил, почему я нарушил эту структуру.1. Configuration – Прежде всего мы должны задать параметры конфигурации,
Структура книги
Структура книги Первая часть книги – теоретическая, она содержит тот базовый набор знаний, без которых работать с программой невозможно. Вы познакомитесь с самыми важными понятиями компьютерной графики, узнаете, зачем в Photoshop так много непонятных и страшных (на первый
Структура
Структура Режим Структура используется при создании больших документов, насыщенных заголовками и подзаголовками (рис. 2.60). Для работы с этим режимом нужно, чтобы документ был отформатирован при помощи стилей (см. разд. 4.7), иначе этот режим в работе помочь не сможет. Рис.
Структура таблицы
Структура таблицы Очень часто применение структуры таблицы может упростить поиск и работу с нужными данными. Предположим, вы создаете прайс-лист, в котором содержатся товары самых разных групп. Этот прайс-лист будет включать заголовки групп товаров, возможно, заголовки
Функции вода/вывода с консольного терминала и порта
Функции вода/вывода с консольного терминала и порта Функции ввода/вывода для консольного терминала выделены в отдельную группу, потому что они используют специфические особенности компьютера IBM/PC (наличие специального видеоадаптера) и не являются переносимыми на
Структура книги
Структура книги В каждой главе описывается один «смертный грех». Вообще–то они никак не упорядочены, но самые гнусные мы разместили в начале книги. Главы разбиты на разделы:? «В чем состоит грех» – краткое введение, в котором объясняется, почему данное деяние считается
Структура книги
Структура книги Книга представляет собой как руководство, так и справочник, поэтому ее главы можно читать в произвольном порядке. Если, например, вы хотите научиться включать в свои HTML–страницы CGI–сценарии, можете начать изучение материала даже с последней главы.Книга
16.2. Структура сценария
16.2. Структура сценария В книге недостаточно внимания уделяется методике создания совершенных сценариев. Здесь речь идет, в основном, о программном коде, который может послужить прототипом для создания целого семейства новых сценариев. Не следует использовать сложные
Структура
Структура Так как вы имеете дело с отображением структурированных данных, необходимо определится с общим размещением. Обычно Joomla! использует структуру размещения элементов показанную ниже: Рис. 1: СтруктураСекция 1: Часть 1: Тут стоит разместить логотип или название