Главная » Просмотр файлов » Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)

Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366), страница 3

Файл №1124366 Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)) 3 страницаЮ.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366) страница 32019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Глава 2. Введение в OPENGL

В качестве атрибутов OpenGL позволяет задавать цвет, ха­рактеристики материала, текстуры, параметры освещения.

  • Функции визуализации позволяют задать положение на­блюдателя в виртуальном пространстве, параметры объек­тива камеры. Зная эти параметры, система сможет не толь­ко правильно построить изображение, но и отсечь объекты, оказавшиеся вне поля зрения.

  • Набор функций геометрических преобразований позволяет программисту выполнять различные преобразования объ­ектов— поворот, перенос, масштабирование.

При этом OpenGL может выполнять дополнительные опера­ции, такие как использование сплайнов для построения линий и поверхностей, удаление невидимых фрагментов изображений, работа с изображениями на уровне пикселей и т.д.

2.2. Интерфейс OpenGL

OpenGL состоит из набора библиотек. Все базовые функ­ции хранятся в основной библиотеке, для обозначения которой в дальнейшем мы будем использовать аббревиатуру GL. Помимо основной, OpenGL включает в себя несколько дополнительных библиотек.

Первая из них — библиотека утилит GL(GLU — GL Utility). Все функции этой библиотеки определены через базовые функ­ции GL. В состав GLU вошла реализация более сложных функ­ций, таких как набор популярных геометрических примитивов (куб, шар, цилиндр, диск), функции построения сплайнов, реа­лизация дополнительных операций над матрицами и т.п.

OpenGL не включает в себя никаких специальных команд для работы с окнами или ввода информации от пользователя. Поэтому были созданы специальные переносимые библиотеки

2.2. Интерфейс OPENGL

27


Прикладная программа

Г]—|

Буфер кадра

Рис. 2.1. Организация библиотеки OpcnGL

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

Наиболее популярной является библиотека GLUT (GL Utility Toolkit). Формально GLUT не входит в OpenGL, но de facto включается почти во все его дистрибутивы и имеет реализа­ции для различных платформ. GLUT предоставляет только ми­нимально необходимый набор функций для создания OpenGL-приложения. Функционально аналогичная библиотека GLX ме­нее популярна. В дальнейшем в этой книге в качестве основной будет рассматриваться GLUT.

Кроме того, функции, специфичные для конкретной оконной подсистемы, обычно входят в ее прикладной программный ин­терфейс. Так, функции, поддерживающие выполнение OpenGL, есть в составе Win32 API и X Window. На рисунке 2.1 схема­тически представлена организация системы библиотек в версии, работающей под управлением системы Windows. Аналогичная организация используется и в других версиях OpenGL.

28

Глава 2. Введение в OPENGL

2.3. Архитектура OpenGL

Функции OpenGL реализованы в модели клиент-сервер. При­ложение выступает в роли клиента — оно вырабатывает коман­ды, а сервер OpenGL интерпретирует и выполняет их. Сам сер­вер может находиться как на том же компьютере, на котором находится клиент (например, в виде динамически загружаемой библиотеки — DLL), так и на другом (при этом может быть ис­пользован специальный протокол передачи данных между ма­шинами).

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

Примитивы определяются набором из одной или более вер­шин (vertex). Вершина определяет точку, конец отрезка или угол многоугольника. С каждой вершиной ассоциируются некоторые данные (координаты, цвет, нормаль, текстурные координаты и т.д.), называемые атрибутами. В подавляющем большинстве слу­чаев каждая вершина обрабатывается независимо от других.

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

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

С точки зрения разработчиков, OpenGL — это набор команд,

2.3. Архитектура OPENGL

29

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

Рис. 2.2. Функционирование конвейера OpenGL

OpenGL является прослойкой между аппаратурой и пользо­вательским уровнем, что позволяет предоставлять единый ин­терфейс на разных платформах, используя возможности аппа­ратной поддержки.

Кроме того, OpenGL можно рассматривать как конечный ав-

30

Глава 2. Введение в OPENGL

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

2.4. Синтаксис команд

Определения команд GL находятся в файле gl.h, для вклю­чения которого нужно написать

^include <gl/gl.h>

Для работы с библиотекой GLU нужно аналогично подклю­чить файл glu.h. Версии этих библиотек, как правило, вклю­чаются в дистрибутивы систем программирования, например, Microsoft Visual C++ или Borland C++ Builder. В отличие от стандартных библиотек, пакет GLUT нужно инсталлировать и подключать отдельно. Подробная информация о настройке сред программирования для работы с OpenGL приведена в Части III.

Все команды (процедуры и функции) библиотеки GL начина­ются с префикса gl, все константы — с префикса GL_. Соответ­ствующие команды и константы библиотек GLU и GLUT ана­логично имеют префиксы glu (GLU_) и glut (GLUT_) Кроме того, в имена команд входят суффиксы, несущие информацию о числе и типе передаваемых параметров. В OpenGL полное имя команды имеет вид:

type glCommand_name[ 1 2 3 4][b s i f d ub us ui][v]

(typel argl ,..., typeN argN)

Имя состоит из нескольких частей:

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

31

gl —имя библиотеки, в которой описана эта функция: для ба­зовых функций OpenGL, функций из библиотек GL, GLU, GLUT, GLAUX это gl, glu, glut, aux соответственно;

Command name —имя команды (процедуры или функции);

[12 3 4 ] — число аргументов команды;

[b s i f d ub us ui ] — тип аргумента: символ b — GLbyte (ана­лог char в C/C++), символ i — GLint (аналог int), символ f— GLfloat (аналог float) и так далее. Полный список типов и их описание можно посмотреть в файле gl.li;

[v ] — наличие этого символа показывает, что в качестве пара­метров функции используется указатель на массив значе­ний.

Символы в квадратных скобках в некоторых названиях не используются. Например, команда glVertex2i() описана в библио­теке GL и использует в качестве параметров два целых числа, а команда glColor3fv () использует в качестве параметра указатель на массив из трех вещественных чисел.

Использования нескольких вариантов каждой команды мож­но частично избежать, применяя перегрузку функций языка C++. Но интерфейс OpenGL не рассчитан на конкретный язык программирования, и, следовательно, должен быть максимально универсален.

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

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

32

Глава 2. Введение в OPENGL

Ниже приведен текст небольшой программы, написанной с использованием библиотеки GLUT — своеобразный аналог клас­сического примера «Hello, World!».

Все, что делает эта программа — рисует в центре окна крас­ный квадрат. Тем не менее, даже на этом простом примере можно понять принципы программирования с помощью OpenGL.

Программа 2.1. Простейший пример OpenGL.

^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.7, 0.7, 0.7, 1); g 1С1 e ar (GL_COLOR_BUFFTER_Brr);

glColor3ub (255 ,0 ,0); glBegin(GL_QUADS); glVertex2f (left , bottom ) ; glVertex2f (left , top ); glVertex2f( right , top ); glVertex2f( right , bottom ) ;

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

33

glEnd();

glFinish () ; }

// Функция вызывается при изменении размеров окна void Reshape (GLint w, GLint h)

{

Width = w;

Height = h;

/* устанавливаем размеры области отображения */ glViewport (0 , 0, w, h);

/* ортографическая проекция */ glMatrixMode (GL_PROJECTION); glLoadldentity () ; glOrtho(0, w, 0, h, -1.0, 1.0);

glMatrixMode (GL_MODELVIEW); glLoadldentity () ; }

// Функция обрабатывает сообщения от клавиатуры void Keyboard ( unsigned char key, int x, int у )

{

const char ESCAPE = '\033';

if ( key = ESCAPE ) exit(0); }

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

void main (int argc , char *argv[])

{

glutlnit (&argc, argv);

34

Глава 2. Введение в OPENGL

glutlnitDisplayMode (GLUT_RGB) ; glutlnitWindowSize (Width , Height ); glutCreateWindow ("Redwsquare„example " );

glutDisplayFunc( Display ) ; gl ut Re shape Fun с (Reshape ) ; glutKeyboardFunc (Keyboard);

glutMainLoop () ; }

Рис. 2.З. Результат работы программы 2.1.

Несмотря на малый размер, это полностью завершенная про­грамма, которая должна компилироваться и работать на любой системе, поддерживающей OpenGL и GLUT.

Библиотека GLUT поддерживает взаимодействие с пользова­телем с помощью так называемых функций с обратным вызовом (callback function). Если пользователь подвинул мышь, нажал на кнопку клавиатуры или изменил размеры окна, происходит со­бытие и вызывается соответствующая функция пользователя — обработчик событий (функция с обратным вызовом).

Рассмотрим более подробно функцию main данного примера.

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

35

Она состоит из трех частей: инициализации окна, в котором бу­дет рисовать OpenGL, настройки функций с обратным вызовом и главного цикла обработки событий.

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

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

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

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

Наконец, glutCreateWindow("RedwsquarewexampleM) задает заго­ловок окна и визуализирует само окно на экране.

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

glutDisplayFunc( Display); glutReshapeFunc (Reshape ); glutKeyboardFimc (Keyboard ) ;

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

Характеристики

Тип файла
Документ
Размер
3,41 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6552
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее