русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Аппаратная архитектура графических ускорителей. Графический конвейер


Дата добавления: 2013-12-23; просмотров: 1536; Нарушение авторских прав


Задание сцены

Задание примитивов

Определение параметров камеры и освещения

Очистка сцены glClear() (используется принцип z-буфера)

Основные идеи OpenGL и DirectX. Расширения OpenGL

Современные технологии компьютерной графики

OpenGL (Open Graphics Library) — открытая библиотека и API для работы с двумерной и трёхмерной графикой.

 

Основные принципы:

● независимость от платформы и языка

● возможность определения всех параметров сцены

 

Входные данные:

● векторная модель поверхностей

● параметры поверхностей

● параметры расположения камеры и освещения

● дополнительные параметры (например, для задания эффектов сцены)

 

Выходные данные:

● Растр

 

Организация:

● набор типов

● набор констант

● набор функций

● набор изменяемых состояний рендеринга

● набор команд

 

Использование (действия, выделенные жирным, могут повторяться в цикле):

1 Инициализация glInit()

5 Генерация сцены:

○ glFinish() — асинхронно

○ glFlush() — синхронно

6 Завершить работу glDone()

 

OpenGL реализуется для каждой платформы с помощью расширений:

WGL — расширение OpenGL под Windows, позволяющее работать с HDC (Handle for Device Context). Работа с контекстом состоит из следующих этапов:

○ wglCreateContext()

○ wglMakeCurrent()

○ wglDeleteContext()

GLUT — расширение OpenGL, подволяющее выводить изображение целиком в окно.

 

Команды:

● glClear() — сброс z-буфера / цвета

● glClearColor() — сброс с закраской окна заданным цветом

● glClearIndex() — очистка индексированных цветов, хранящихся в палитре



● glGetColor()

● glSetColor()

 

Задание примитивов:

glBegin(<команда, определяющая тип примитива>)

<установка параметров (цвет, эффекты)>

...

glVertex(<точка>);

glVertex(<точка>);

glVertex(<точка>);

...

glEnd();

 

Наборы команд можно сохранять в виде списков (display lists) и затем целиком выполнять:

glNewList()

<команды>

glEndList()

...

glCallList()

 

Работа со стеком атрибутов:

● glPushAttrib() — заталкивает текущие параметры в стек атрибутов

● glPopAttrib() — извлекает параметры из стека и применяет их

 

Работа с матрицей преобразований:

● glPushMatrix() — заталкивает текущую матрицу в стек

● glPopMatrix() — извлекает матирцу из стека и применяет её

 

Ещё что-то про

● glMatrixMode()

● glLoadIdentity() — загрузка единичной матрицы

● glLoadMatrix()

● glLoadTransposeMatrix()

● glTranslate() — сдвиг

● glRotate() — поворот

● glScale() — масштабирование

 

Камера:

● glLookAt()

● glFrustum() — перспективная проекция

● glOrtho() — параллельная проекция

● glViewPort() — определяет, какую часть плоскости проецирования отображать в растр

 

Освещение. Допускается максимум 8 источников освещения. Включение/выключение освещения производится с помощью процедур glEnable() / glDisable(). Настройка освещения — с помощью glLight() с различными параметрами:

● GL_POSITION — положения источника

● GL_SPOT_DIRECTION — направление освещения

● GL_CUT_OFF — угол разброса лучей // meow

Виды освещения:

● GL_AMBIENT — фоновое

● GL_DIFFUSE — рассеянное

● GL_SPECULAR — отражённое

 

Материалы: используется процедура glMaterial() с параметрами

● GL_AMBIENT — фоновый цвет материала (?)

● GL_DIFFUSE — рассеянный

● GL_SPECULAR — зеркальный

Дополнительные параметры

● GL_SHINESS — степень отражения

● GL_EMISSION — настройка излучения

 

Наложение текстур:

● glTexImage1D() — загрузка одномерной текстуры

● glTexImage2D() — загрузка двумерной текстуры

● glTexCoord() — определяет координату привязки текстуры к объекту

 

Возможно также смешивание отрисовываемых примитивов с уже имеющимися на сцене. Цвет каждого пикселя определяется как

R = RS * SR + RD * DR

G = GS * SG + GD * DG

B = BS * SB + BD * DB

A = AS * SA + AD * DA

где

R,G,B,A — получаемый цвет

RS, GS, BS, AS — цвет точки рисуемого примитива

RD, GD, BD, AD — цвет точки сцены

SR, SG, SB, SA — коэффициенты для примитива

DR, DG, DB, DA — коэффициенты для сцены

Примеры:

● при S*=1, D*=0 — рисование поверх

● при S*=0.5, D*=0.5 — рисование с 50%-й прозрачностью

● при S*=0, D*=1 — никакого рисования

 

Кроме того, можно задавать функцию смешивания с помощью glBlendFunc().

 

DirectX — набор API от Microsoft, предназначенных для создания мультимедийных приложений:

● Direct3D — трёхмерная графика

● DirectAnimation — ??

● DirectDraw — интерфейс вывода растровой графики (его разработка давно прекращена)

● DirectInput — интерфейс, используемый для обработки данных, поступающих с клавиатуры, мыши, джойстика и пр. игровых контроллеров.

● DirectMusic — интерфейс воспроизведения музыки в форматах Microsoft

● DirectShow — интерфейс, используемый для ввода/вывода аудио и/или видео данных.

 

Поскольку эти API представлены в виде COM-объектов (в конечном счёте в виде exe- и dll-файлов), то DirectX можно применять при разработке приложений любых языках, поддерживающих COM-технологию.

 

Объект

● IUnknownInterface — базовый родительский интерфейс

○ AddRef() — увеличивает счётчик ссылок на объект

○ Release() — уменьшается счётчик ссылок и при необходимости уничтожает объект.

○ QueryInterface() — запрос любого другого интерфейса (?)

● IDispatch

 

Некоторые интерфейсы для работы с 3D-графикой:

● IDirect3D8 — отвечает, в частности, за инициализацию

● IDirect3DDevice8 — интерфейс устройства

● IDirect3DVertexBuffer — работа с буфером вершин

● IDIrect3DTexture8 — работа с текстурами

 

Работа с DirectX (действия, выделенные жирным, могут повторяться в цикле):

1 Инициализация Direct3DCreate8 (результат: ID3D8)

2 Создание графического устройства CreateDevice (результат: ID3DDevice). Необходимые параметры:

○ код устройства

○ режим графического ускорителя

○ взаимодействие с оконной системой / полный экран

○ количество фоновых буферов

3 Очистка буферов ID3DDevice::Clear

5 ID3DDevice8::Present

6 Освобождение ресурсов Release

 

Задание сцены:

● IDirect3DVertexBuffer

● IDirect3DDevice::SetViewPort — преобразование мировых координат в экранные

● IDirect3DDevice::SetTransform — преобразование мировых координат в мировые

● IDirect3DDevice::SetLight

● IDirect3DDevice::LightEnable

Графический ускоритель — аппаратная реализация алгоритмов.

● Вход: положение объектов, камеры, освещение

● Выход: растр.

 

Работа графического конвейера:

● выборка, распаковка (координаты, α-канал, индекс-палитры и пр. приводятся к унифицированному формату)

● процессор вершин (преобразование мировых координат в экранные, заливка Гуро/Фонг)

● пост-буфер вершин (вычисление списка уникальных вершин, построение их триад - позволяет избежать повторных вычислений)

● установка треугольников (проверка видимости, отсечение)

● разбиение и установка фрагментов (определение нормали и текстуры для каждого треугольника, эффекты, интерполяция)

● процессор фрагментов (вычисление текстуры и итогового цвета для каждого пикселя)

● смешивание (blending)

● запись в кадр (формирование выходного буфера)



<== предыдущая лекция | следующая лекция ==>
Метод трассировки лучей | Методы маскирования изображений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.