астини даної книги.
2.3.2 Управління вікнами
П'ять підпрограм інструментарію GLUT виконують завдання, необхідні для того, щоб ініціалізувати вікно.
Підпрограма glutlnit (int * argc, char ** argv) ініціалізує бібліотеку GLUT іобрабативает будь-які аргументи командного рядка (для оболонки X WindowSystem це могли б бути такі опції, як-display і-geometry). Підпрограма glutlnit () повинна бути викликана перед будь-який інший підпрограмою бібліотеки GLUT.
Підпрограма glutInitDisplayMode (unsigned int mode) визначає, яку колірну модель слід використовувати: режим RGBA або режим індексації кольору. Можна також визначити, чи хочете ви працювати з буфером кадру вікна з одинарною або з подвійний буферизацією. (Якщо ви працюєте в режимі індексації кольору, то ви, можливо, захочете завантажити деякі кольори в таблицю компонентів кольору; для того щоб зробити це, скористайтеся командою glutSetColor ().) Нарешті, можна використовувати цю підпрограму для того, щоб вказати, що ви хочете пов'язати з даними вікном буфери глибини, трафарету і/або буфер-накопичувач. Наприклад, якщо ви хочете використовувати вікно з подвійною буферизацією, колірною моделлю RGBA і буфером глибини, то для цього можна викликати розглянуту підпрограму зі наступними параметрами: g utlnitmsv & yMote {GLUT_DOUBLE GLUT ^ RGB GLUTJ) EPTH). p> Підпрограма glutInitWindowPosition (int х, int у) визначає місце розташування лівого верхнього кута створюваного вікна на екрані монітора.
Підпрограма glutInitWindowSize (int width, int size) визначає розмір створюваного вікна в пікселях.
Підпрограма int glutCreateWindow (char * string) створює вікно з контекстомOpenGL. Ця підпрограма повертає унікальний ідентифікатор для нового вікна. Майте на увазі: до тих пір, поки викликається підпрограма glutMainLoopO, це вікно ще відображається на екрані.
2.3.3 Функція зворотного дзвінка відображення
Підпрограма gIutDisplayFunc (void (*/В«nc) (void)) являє собою першу і найважливішу функцію зворотного виклику по події, з якою вам належить зіткнутися. Всякий раз, коли бібліотека GLUT визначає, що вміст даного вікна має бути відновлено, виконується функція зворотного виклику, зареєстрована підпрограмою glutDisplayFunc (). Тому ви повинні помістити всі підпрограми, які необхідні для перемальовування сцени, в дану функцію зворотного виклику відображення.
Якщо ваша програма змінює вміст вікна, то іноді ви повинні будете викликати підпрограму glutPostRedisplay (void), яка змушує підпрограму glutMainLoopO викликати зареєстровану функцію зворотного виклику відображення при наступному зручному випадку.
2.3.4. Виконання програми
Самое останнє, що ви повинні зробити, це викликати підпрограму glutMainLoop (void). При цьому відображаються всі вікна, які були створені, й у цих вікнах тепер працює візуалізація. Починається обробка подій, і викликається зареєстрована функція зворотного виклику відображення. Увійшовши одного разу в цей цикл, з нього не виходять ніколи!
Приклад 2 демонструє, як можна було б скористатися інструментарієм GLUT, щоб створити просту програму, показану раніше в прикладі 1. Зверніть увагу на реструктурування програмного коду. Для того щоб зробити ефективність програми максимальної, всі операції, які повинні викликатися одноразово (установка кольору фону і системи координат), тепер включені до складу процедури, названої init (). Операції, необхідні для візуалізації (і, можливо, для повторної візуалізації) сцени, включені до складу процедури display (), яка являє собою зареєстровану функцію зворотного виклику відображення бібліотеки GLUT.
Приклад 2 Проста програма OpenGL, що використовує інструментарій GLUT: hello.c
# include # Include
void display (void)
/* Очистити всі пікселі */
glClear (GL_COLOR_BUFFER_BIT);
/* намалювати білий багатокутник (прямокутник) з кутами,
розташованими в точках з координатами (0.25, 0.25, 0.0)
і (0.75, 0.75, 0.0) */
glColor3f (1.0, 1.0, 1.0); glBegin (GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0),
glVertex3f (0.75, 0.25, 0.0),
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0); glEnd ();
/* He чекати! Запустити обробку Буферізірованний
* підпрограм OpenGL */
glFlushO;}
void init (void) {p>/* Вибрати колір очищення (колір фону) */
glClearColor (0.0, 0.0, 0.0, 0.0);
/* Ініціалізувати Популярні значення */
glMatrixMode (GL_PROJECTION);
glLoadldentity ();
glOrtho (0.0, 1.0, 0.0, 1.0, -1.0, 1.0);}/*
Оголосити початковий розмір вікна, його положення на екрані і режим відображення (одинарна буферизація і режим RGBA).
Відкрити вікно зі словом "hello" в рядку заголовка. Викликати підпрограми ініціалізації. Зареєструвати функцію зворотного виклику для відображення графі...