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

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

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





Типичная программа, использующая 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; просмотров: 566. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

Броматометрия и бромометрия Броматометрический метод основан на окислении вос­становителей броматом калия в кислой среде...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

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

В теории государства и права выделяют два пути возникновения государства: восточный и западный Восточный путь возникновения государства представляет собой плавный переход, перерастание первобытного общества в государство...

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