Очистка сцены 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-технологию.