Студопедия — Пример приложения
Студопедия Главная Случайная страница Обратная связь

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

Пример приложения






Типичная программа, использующая OpenGL, начинается с определения окна, в котором будет происходить отображение. Затем создается контекст (клиент) OpenGL и ассоциируется с этим окном. Далее программист может свободно использовать команды и операции OpenGL API.

Ниже приведен текст небольшой программы, написанной с использованием библиотеки GLUT. Результат работы программы –красный квадрат в центре окна.

 

#include <stdlib.h>

/* подключаем библиотеку GLUT */

#include <gl/glut.h>

/* начальная ширина и высота окна */

GLint Width = 512, Height = 512;

/* размер куба */

const int CubeSize = 200;

/* эта функция управляет всем выводом на экран */

void Display(void)

{

int left, right, top, bottom;

left = (Width - CubeSize) / 2;

right = left + CubeSize;

bottom = (Height - CubeSize) / 2;

top = bottom + CubeSize;

glClearColor(0, 0, 0, 1);

glClear(GL_COLOR_BUFFER_BIT);

glColor3ub(255,0,0);

glBegin(GL_QUADS);

glVertex2f(left,bottom);

glVertex2f(left,top);

glVertex2f(right,top);

glVertex2f(right,bottom);

glEnd();

glFinish();

}

/* Функция вызывается при изменении размеров окна */

void Reshape(GLint w, GLint h)

{

Width = w;

Height = h;

/* устанавливаем размеры области отображения */

glViewport(0, 0, w, h);

/* ортографическая проекция */

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0, w, 0, h, -1.0, 1.0);

 

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

/* Функция обрабатывает сообщения от клавиатуры */

void

Keyboard(unsigned char key, int x, int y)

{

#define ESCAPE '\033'

if(key == ESCAPE)

exit(0);

}

/* Главный цикл приложения */

main(int argc, char *argv[])

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGB);

glutInitWindowSize(Width, Height);

glutCreateWindow("Red square example");

glutDisplayFunc(Display);

glutReshapeFunc(Reshape);

glutKeyboardFunc(Keyboard);

glutMainLoop();

}

 

Рассмотрим более подробно функцию main данного примера. Она состоит из трех частей – инициализации окна, в котором будет рисовать OpenGL, настройки функций c обратным вызовом и главного цикла обработки событий.

Инициализация окна состоит из настройки соответствующих буферов кадра, начального положения и размеров окна, а также заголовка окна.

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

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

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

glutCreateWindow("Red square example") задает заголовок окна и визуализирует само окно на экране.

Затем команды

 

glutDisplayFunc(Display);

glutReshapeFunc(Reshape);

glutKeyboardFunc(Keyboard)

 

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

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

Библиотека GLUT не входит в состав OpenGL, а является лишь переносимой прослойкой между OpenGL и оконной подсистемой, предоставляя минимальный интерфейс.

Рассмотрим функцию Display, в которой сосредоточен код, непосредственно отвечающий за рисование на экране.

Следующая последовательность команд из функции Display

 

glClearColor(0, 0, 0, 1);

glClear(GL_COLOR_BUFFER_BIT);

glColor3ub(255,0,0);

glBegin(GL_QUADS);

glVertex2f(left,bottom);

glVertex2f(left,top);

glVertex2f(right,top);

glVertex2f(right,bottom);

glEnd();

 

очищает окно и выводит на экран квадрат, задавая координаты четырех угловых вершин и цвет.







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



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Гносеологический оптимизм, скептицизм, агностицизм.разновидности агностицизма Позицию Агностицизм защищает и критический реализм. Один из главных представителей этого направления...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия