Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Изучение трехмерной компьютерной графики на примере OpenGL

Тип Доклад
Предмет Основы разработки по, программирование

ID (номер) заказа
3939701

300 руб.

Просмотров
465
Размер файла
2.69 Мб
Поделиться

Ознакомительный фрагмент работы:

Изучение трехмерной компьютерной графики на примере OpenGL
Задача трехмерной компьютерной графики
Трехмерная графика – это раздел компьютерной графики, основанный на
трехмерных моделях.
Задача трехмерной графики - презентовать объект, явление или
пространство в стилизованной или реалистичной визуальной форме. Дизайнеры
рисуют предметы почти с нуля, настраивают освещение, работают над
композицией кадра и в целом выполняют большую работу, поэтому часто
сложно понять, действительно ли мы видим фотографию или это качественный
3D-рисунок. То же самое касается анимации — эффектов в фильмах,
персонажей компьютерных игр, интерактивных презентаций.
OpenGL, что это?
OpenGL (Open Graphics Library — открытая графическая библиотека) —
спецификация, определяющая независимый от языка программирования кросс-
платформенный программный интерфейс для написания приложений,
использующих двумерную и трехмерную компьютерную графику (это стандарт
API).
Включает более 250-ти функций для рисования сложных трехмерных
сцен из простых примитивов. Используется при создании видео-игр, САПР,
виртуальной реальности, визуализации в научных исследованиях. На платформе
Windows конкурирует с DirectX.
OpenGL ориентируется на следующие две задачи:
 скрыть сложности адаптации различных 3D-ускорителей предоставляя
разработчику единый API
 скрыть различия в возможностях аппаратных платформ, требуя
реализации недостающей функциональности с помощью программной
эмуляции
История создания

Интерфейс OpenGL (Open Graphics Library) создан и запущен в 1992 году
известными компаниями в сфере разработки программ. Он был представлен как
кросс-платформенный интерфейс, не зависящий от аппаратного обеспечения. В
базе лежала IRIS GL - библиотека, которую ранее разработали специалисты из
Silicon Graphics Inc (SGI).
Но любая программа, а также библиотека не стоит на месте и постоянно
развивается, используя новые возможности компьютерной графики и
технологические особенности новых видеокарт.

Развитие библиотеки OpenGL происходит за счет специализированной
структуры - Architectural Review Board (ARB). Это "Комитет по пересмотру
архитектуры". В него включены несколько компаний, которые имеют
определенные интересы в процесс развития рассматриваемой библиотеки. Сюда
входят такие гиганты как 3D Labs, NVIDIA, ATI, Intel, id Software, SGI, Apple, и
Microsoft, который в своих реализациях Windows использует OpenGL. Версия
же этого OpenGL сходна с более ранними разработками и не может работать с
аппаратным ускорением, но эти возможности появляются благодаря драйверам
используемых видеокарт.

OpenGL используется повсюду, начиная с 90-х голов 20 века. Это связано
с тем, что данная библиотека была грамотно написана с удачной архитектурой.
Эта библиотека ведет себя стабильно при использовании, а также поведение
OpenGL легко предсказать. Одним из недостатков является медленное развитие.
Это связано с медленной работой ARB, а именно в том, что при изменении
определенных стандартов много времени уходит на согласование различных
документов.
Особенно это заметно в последнее время, когда дешевые видеокарты
стали достаточно профессиональными и их возможности меняются примерно
раз в год. А развитие OpenGL отстает от развития технологий видеокарт,
поэтому существуют расширения, использующие отдельными разработчиками
для возможности использования новых функций видеокарт.
Поддерживаемые операционные системы
OpenGL можно использовать в различных операционных системах, таких
как:
 Windows,
 Mac OS,
 Linux,
 BSD
 и др.
Поддерживаемые языки
Официальный сайт OpenGL имеет ссылки на привязки для следующих
языков:
 Java,
 Фортран 90,
 Perl,
 Pike,

 Python,
 Ada,
 Visual Basic,
 Pascal.
Имеются также варианты привязки OpenGL для языков C++ и C#.
Система координат – куда направлены оси.
В OpenGL принята система координат, в которой ось Y направлена вверх,
ось Z вперёд, а X вправо.
OpenGL хранит матрицу преобразования в следующем виде:

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

Графические примитивы (точки, линии, полигоны, треугольники,
прямоугольник).

Создатели OpenGL планировали свой язык с явным намерением создать
"виртуальный графический акселератор", так чтобы примитивы OpenGL
максимально соответствовали примитивам современных графических карт и
требовали минимум кода для трансляции из одной системы команд в другую.
В OpenGL есть следующие типы примитивов:
 точка,
 линия,
 треугольник,
 прямоугольник,
 полигон.
Каждый из этих объектов описывается перечислением своих вершин:
координаты точки, концов отрезка или вершин многоугольника.
Рисование примитивов
Процедура рисования заключается в командные скобки
glBegin(mode)
… // команды, указывающие вершины фигуры
glEnd;

Треугольник
Сейчас наше приложение рисует один треугольник. Если мы посмотрим
на класс OpenGLRenderer, то в методе prepareData увидим в нем список вершин:

Каждая пара значений – это координаты (x,y) одной вершины. Три пары = три
вершины = треугольник.
Далее, в методе onDrawFrame мы используем метод glDrawArrays чтобы
нарисовать треугольник.

GL_TRIANGLES - тип примитива, который необходимо нарисовать,
треугольник в нашем случае
0 - вершины надо брать из массива начиная с позиции 0, т.е. с самой
первой
3 - означает, что для рисования необходимо использовать три вершины

Типы треугольников
Чтобы нарисовать треугольник, мы передаем тип GL_TRIANGLES в
метод glDrawArrays. Существует еще два типа отрисовки треугольников:

 GL_TRIANGLE_STRIP,
 GL_TRIANGLE_FAN.
Линия
Переходим к линии. Чтобы нарисовать линию нам необходимо указать
две вершины.
Задаем их в массиве:

И перепишем onDrawFrame:

Используем константу GL_LINES и указываем, что надо использовать две
вершины.
Запускаем

Типы линий
Существует три типа отрисовки линий. Разберем их на примерах.
1. GL_LINES мы уже использовали, он просто берет попарно вершины и
рисует линии между ними. Т.е. если у нас есть вершины (v0, v1, v2, v3, v4, v5),
то мы получим три линии (v0,v1), (v2,v3) и (v4,v5).
2. Тип GL_LINE_STRIP рисует линии не попарно, а последовательно
между всеми вершинами. Т.е. если у нас есть вершины (v0, v1, v2, v3, v4, v5), то
мы получим пять линий (v0,v1), (v1,v2), (v2,v3), (v3,v4) и (v4,v5).
3. Тип GL_LINE_LOOP аналогичен GL_LINE_STRIP, только он вдобавок
еще рисует линию между первой и последней точкой.
Точка
Осталось рассмотреть точку. Здесь уже нет никаких разных типов, только
GL_POINTS.

Укажем его в glDrawArrays:

Нарисованы 6 точек:

Рисуем прямоугольник по 4 точкам

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

GL_POLYGON - Рисование полигонов от 3 точек.

Текстура
Текстура — это 2D изображение (1D и 3D текстура также существуют),
используемое для добавления деталей объекту; считайте, что текстура — это
кусок бумаги с картинкой кирпича (к примеру), который наклеен на ваш дом и
кажется, что ваш дом сделан из кирпича.

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

Текстурные координаты находятся в промежутке между 0 и 1 по x и y оси
(мы же используем 2D текстуры). Получение цвета текстуры с помощью
текстурных координат называется отбором (sampling). Текстурные координаты
начинаются в (0, 0) в нижнем левом углу текстуры и заканчиваются на (1, 1) в
верхнем правом углу.

Мы указали 3 текстурные координаты для треугольника. Мы хотим, чтобы
нижний левый угол треугольника соотносился с нижним левым углом текстуры,
поэтому мы передаем (0, 0) нижней левой вершине треугольника.
Соответственно в нижнюю правую вершину передаем (1, 0). Верхняя вершина
треугольника должна соотноситься с центральной частью верхней стороной
текстуры, поэтому мы передаем в верхнюю вершину (0.5, 1.0) в качестве
текстурной координаты.
В результате текстурные координаты для треугольника должны выглядеть
следующим образом:

Триангуляция

Процесс разбиения полигональной области со сложной конфигурацией в
набор треугольников называется триангуляцией. При анализе или синтезе
сложных поверхностей их аппроксимируют сеткой треугольников, и
впоследствии оперируют с простейшими полигональными областями, т.е. с
каждым из треугольников.
Особый интерес к алгоритмам триангуляции определяется тем, что они
используются во многих процедурах машинной графики, таких как
формирование поверхностей, закраска, удаление невидимых частей, отсечение.
При триангуляции в качестве исходных данных наиболее часто задаются
вершины полигона. Задача состоит в том, чтобы представить этот полигон
совокупностью составных непересекающихся треугольников. В одном из самых
распространенных программных интерфейсов (API) для разработки
приложений в области двумерной и трехмерной графики стандарте OpenGL для
формирования триангуляционной сетки используются следующие команды:
GL_TRIANGLES. Треугольники. Команда рисует серию треугольников,
используя тройки вершин v0, v1 и v2, затем v3, v4 и v5 и т.д. Если количество
вершин не кратно 3, оставшиеся точки игнорируются. Команду удобно
использовать при описании поверхности, которая в результате тесселяции
представляется кроме треугольников и другими геометрическими фигурами,
например, прямоугольниками. В этом случае треугольники могут быть не
соприкасаться между собой. Команда может использоваться для описания всех
треугольников полигона, независимо от того, связаны они или нет между собой,
однако из-за дублирования информации о координатах общих вершин память
используется нерационально.
GL_TRIANGLE_STRIP. Полоса треугольников. Команда рисует серию
треугольников, используя вершины в следующем порядке: v0, v1, v2, затем v2,
v0, v3, затем v2, v3, v4, и т. д. При таком подходе каждая следующая вершина
вместе с двумя предыдущими задает треугольник. Порядок вершин должен

гарантировать, что треугольники имеют правильную ориентацию. Полоса
может использоваться для формирования части поверхности.
GL_TRIANGLE_FAN. Команда похожа на GL_TRIANGLE_STRIP, но при
формировании треугольников используют вершины в таком порядке: v0, v1, v2,
затем v0, v2, v3, затем v0, v3, v4, и т. д. Все треугольники имеют общую
вершину v0. Команда позволяет разбить n-угольник на n-2 треугольника. Для
этого нужно выбрать одну из n вершин полигона и соединить ее с каждой из n-3
несоседних вершин.
Матрицы
Однородные координаты
До текущего момента мы оперировали 3х-мерными вершинами как (x, y,
z) триплетами. Введем еще один параметр w и будем оперировать векторами
вида (x, y, z, w).
Нужно заомнить:
Если w == 1, то вектор (x, y, z, 1) - это позиция в пространстве.
Если же w == 0, то вектор (x, y, z, 0) - это направление.
Однородные координаты позволяют нам с помощью одной
математической формулы оперировать векторами в обоих случаях.
Матрицы трансформаций
в трехмерной графике мы будем использовать только матрицы 4x4,
которые позволят нам трансформировать наши вершины (x, y, z, w).
Трансформированная вершина является результатом умножения матрицы на
саму вершину:
Матрица x Вершина (именно в этом порядке!!) = Трансформир. вершина

Мы будем использовать это довольно часто, так что имеет смысл
поручить это компьютеру:

Аффинные преобразования
Аффинные преобразования координат (поворот, перемещение и
масштабирование) выполняются над объектом в МСК. Преобразования
выполняются в результате умножения координат точек, задающих вершины
объекта, на видовую матрицу, имеющую вид:

Иными словами, элементы видовой матрицы, как, впрочем, и любой иной
матрицы OpenGL, размещаются в памяти по столбцам - так, как это принято в
Фортране.
Видовую матрицу можно изменить. Однако прежде ее необходимо сделать
текущей. Это происходит после вызова
call fglMatrixMode(gl_modelview) ! Текущей стала видовая матрица
В свою очередь, видовая матрица может быть:

 установлена равной матрице идентичности:
call fglLoadIdentity( )
 установлена равной произвольной, ранее заданной матрице, например:
real(4), dimension(4, 4) :: matr
matr = reshape((/ 0.3, -0.5, 0.1, 0.0, &
 0.2, -0.4, 0.2, 0.0, &
 0.1, -0.3, 0.3, 0.0, &
 0.0, 0.0, 0.0, 1.0 /), &
 shape = (/ 4, 4 /))
call fglMatrixMode(gl_modelview) ! Текущей стала видовая матрица
call fglLoadMatrixf(loc(matr)) ! Матрица matr загружена как видовая
матрица
 умножена на другую произвольную матрицу, например:

real(4), dimension(4, 4) :: rx, ry
sf = sqrt(1.0 / 3.0); cf = sqrt(2.0 / 3.0)
sp = sqrt(1.0 / 2.0); cp = sqrt(1.0 / 2.0)
rx = reshape((/ 1.0, 0.0, 0.0, 0.0, &
 0.0, cf, -sf, 0.0, &
 0.0, sf, cf, 0.0, &
 0.0, 0.0, 0.0, 1.0 /), &
 shape = (/ 4, 4 /))
ry = reshape((/ cp, 0.0, sp, 0.0, &
 0.0, 1.0, 0.0, 0.0, &
 -sp, 0.0, cp, 0.0, &
 0.0, 0.0, 0.0, 1.0 /), &
 shape = (/ 4, 4 /))
. . .
call fglMatrixMode(gl_modelview) ! Теперь видовая матрица является текущей

call fglMultMatrixf(loc(rx)) ! Умножаем текущую матрицу на матрицу rx
call fglMultMatrixf(loc(ry)) ! Умножаем текущую матрицу на матрицу ry
 умножена на матрицу аффинного преобразования:

- матрицу вращения:

call fglRotatef(ay, 0.0, 1.0, 0.0) ! Поворот на угол ay против часовой стрелки

- матрицу масштабирования:

Например, умножение на матрицу

обеспечит вызов
call fglScalef(0.5, 0.5, 0.7) ! Масштабирование объекта
- матрицу переноса:

Например, умножение на матрицу

вызовет перенос объекта на 10 единиц вдоль оси x:
call fglTranslatef(10.0, -30.5, 20.7) ! Перенос объекта вдоль оси x
Direct X и OpenGL – сравнение с точки зрения доступных
поддерживаемых операционных систем.
Разработка приложений Direct3D ориентирована на платформу Microsoft
Windows.
API OpenGL является открытым стандартом, что означает, что различные
производители оборудования и разработчики операционных систем могут
свободно создавать реализацию OpenGL как часть своей системы. Реализации
OpenGL существуют для самых разных платформ. Наиболее примечательно, что
OpenGL является доминирующим графическим API Unix-подобных
компьютерных систем.
С точки зрения разработчика приложений Direct3D и OpenGL одинаково
открыты; полная документация и необходимые инструменты разработки
доступны без ограничений.
API Поддержка
десктопов

Поддержка
встраиваемых систем Лицензия

Direct3D Microsoft
Windows, Xbox

Windows
Embedded,Windows
CE (через Direct3D
Mobile)

Проприетарные

OpenGL Кроссплатформенность Кросс-платформенный
через OpenGL ES

Открытый
стандарт,
некоторые
запатентованные

функции
Более подробно, два API компьютерной графики являются следующими:
1. Direct3D-это проприетарный API от Microsoft, который предоставляет
функции для рендеринга двумерной (2D) и трехмерной (3D) графики и
использует аппаратное ускорение, если оно доступно на видеокарте. Он был
разработан корпорацией Microsoft для использования на платформе Windows.
2. OpenGL-это открытый стандартный API, который предоставляет
множество функций для рендеринга 2D и 3D графики и доступен в большинстве
современных операционных систем, включая, но не ограничиваясь ими,
Windows, macOS и Linux.


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

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

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
46 527 оценок star star star star star
среднее 4.9 из 5
РАНХиГС
Работа выполнена досрочно. Автор отвечает на все вопросы. Работа выполнена хорошо, без зам...
star star star star star
Курганская Академия доп.образования
Спасибо, Ольга Вам за выполненную работу. Безукоризненно! Надеюсь на дальнейшее сотрудниче...
star star star star star
РГУТиС
большое спасибо все выполнено на высшем уровне без нареканий. приятно было поработать с вами
star star star star star

Последние размещённые задания

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

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно
    Введите ваш e-mail
    Файл с работой придёт вам на почту после оплаты заказа
    Успешно!
    Работа доступна для скачивания 🤗.