Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
exam_answers_v3.2_2013.docx
Скачиваний:
0
Добавлен:
12.01.2020
Размер:
3.08 Mб
Скачать

2. Компьютерная графика. Библиотека OpenGl. Возможность визуализации в несколько окон приложения

Речь идет о реализации намерения в одном приложении иметь несколько окон приложения в рамках работы с библиотекой OpenGL под Microsoft Visual Studio.

Окно просмотра — это прямоугольная область окна, в которой рисуется изображение. Для каждой функции, отвечающей за рисование, можно задать отдельное окно. Работа с несколькими окнами: убрать ненужное, скрыть, изменить имя окна , свернуть, сделать «текущим»…

Возможность реализации. Под управлением библиотеки GLUT (GLUT не входит в состав OpenGL, а является лишь переносимой прослойкой между OpenGL и оконной подсистемой, предоставляя минимальный интерфейс.) есть функция, которая организует бесконечный цикл обработки сообщений. В этой функции есть возможность создать несколько окон приложения (обычно не больше трех, если больше – начинает тормозить).

Возможность визуализации в несколько окон приложения.

Можно создавать сколь угодное кол-во окон.

Для этого нужно в главном цикле приложения задавать настройки для вывода двух окон.

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

{

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

//библиотеки GLUT.

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); //и настраивает полноцветный

//(непалитровый) режим RGB.

//Window 1

glutInitWindowSize(Width1, Height1);

glutInitWindowPosition(0,0);

id1=glutCreateWindow("window 1");

glutReshapeFunc(Reshape); //регистрирует функцию Reshape(),

glutDisplayFunc(Display1); //регистрирует функцию Display(),

// которая будет вызвана

//при перерисовке окна.

glutMouseFunc(Mouse1);

glutKeyboardFunc(Keyboard); //регистрирует функцию Keyboard(),

//которая будет вызвана при

//нажатии клавиши на клавиатуре.

//Window 2

glutInitWindowSize(Width2, Height2);

glutInitWindowPosition(420,400);

id2=glutCreateWindow("window 2 клик левой кнопкой");

glutReshapeFunc(Reshape2);

glutDisplayFunc(Display2);

glutMouseFunc(Mouse2);

glutSetWindow(id2);

glutMainLoop(); //Внутри бесконечного цикла в этой функции

//происходит контроль всех событий и вызов

//нужных функций.

3. Компьютерная графика. Библиотека OpenGl. Возможность визуализации в несколько окон вывода в одном окне приложения

По умолчанию окно просмотра подразумевает соответствие размерам экранного окна. Есть функция glViewPort, с помощью которой захватывается часть окна приложения. Так можно получить эффект «картинка в картинке» или отображения одновременно нескольких различных видов в одном окне. Можно устраивать анимацию в каждом окне приложения с разными сюжетами, причем разные по действию, по скорости. Разные сюжеты в каждом окне вывода.

Окно вывода в одном окне приложения представляет из себя прямоугольник в оконной системе координат, размеры которого задаются командой glViewPort, это выделенное место для предполагаемого действия, его не видно пока не начнете выполнять в нем действие.

void glViewport (x,y,width,height)

Аргументы (х, у) задают левый нижний угол окна просмотра, a width и height устанавливают его размер. По умолчанию начальными значениями окна просмотра являются (0, 0, width,height), где width и height — размеры экранного окна. Значения всех параметров задаются в пикселах.

Чтобы создать два смежных окна просмотра:

glViewport(0, 0, sizex/2, sizey);

glViewport(sizex/2, 0, sizex/2, sizey);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]