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

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

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






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



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

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

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

ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на со­временном уровне требований общества нельзя без по­стоянного обновления и обогащения своего профессио­нального педагогического потенциала...

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

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

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

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