OpenGL
Графические библиотеки 2D –GAPI –GDI –XWindow –GTK –QT 3D –DirectX –OpenGL
OpenGL Идеология –Редкие версии –Расширения Коллективное создание Кроссплатформенность Чисто программная реализация Mesa
OpenGL Дополнительные библиотеки –GLUT –GLEW
Устройство OpenGL Буфера –Кадра –Трафарета –Глубины Матрицы и стеки матриц –Матрица модели –Матрица проектирования Примитивы
Конвеер обработки OpenGL
OpenGL Примитивы -GL_POINTS -GL_LINES -GL_LINE_STRIP -GL_LINE_LOOP -GL_TRIANGLES -GL_TRIANGLE_STRIP -GL_TRIANGLE_FAN -GL_QUADS -GL_QUAD_STRIP -GL_POLYGON -Дисплейные списки -Дистанцибельность клиент-сервер )
-Дисплейные списки -Дистанцибельность -клиент-сервер -излишняя информация – массивы вершин
Пример Ну тут пример…
Идеология сборки сцены Примитивы лопатятся и и в случае прохождения выбранных тестов (stensil, deapth) направляются в какие-то из буферов (color, death, stensil) там с ними происходит какое-нибудь действие. А если мы попали в буфер цвета то происходит оцветнение
Оцветнение Раскраска с использованием цветовой модели –Освещение –Смешивание –Текстурирование mid-mapping Точное Линейное
Цветовая модель
Как сделать быстро LOD – Level of details Стандартные оптимизации - не выводить то что точно не видно –Не выводить то что за спиной –Использовать портальные техники Stencil buffer –PVS – что такое? Кто помнит?
Как сделать красиво Фокусировка Отражение –2 вывода на каждый кадр –сферическое наложение Тени –Fake –Shadow Mapping –Shadow Volume
Fake Ну… добавить в сцену еще черных треугольников
Shadow Volumes (Stensil shadows) Общая идея алгоритма –Строим shadow volume – трехмерную границу света и тени –Рисуем сцену в Z-Buffer –Выводим в трафарет передние грани shadow volume и инкрементируем его если Z-тест прошел –Выводим в трафарет задние грани shadow volume и декрементируем его если Z-тест прошел –Там где в трафарете значение > начального – тень есть
Pros and cons + –Попиксельная точность - –Слабая расширяемость (высокий fillrate) LOD –Volume сильно негладкий –Очень сложно делать мягкие тени
Shadow Mapping Общая идея алгоритма –Выводим картинку один раз смотря из источника света –Строим карту глубин в специальной текстуре А. –Выводим сцену от камеры и если пиксель дальше от источника, чем то что в текстуре А, то он затенен
Что нужно от OpenGL OpenGL 1.4 –ARB_depth_texture –ARB_shadow
Проблемы –Алиасинг глубины Лечится аппаратно –Проективный алиасинг –Перспективный алиасинг на близкие к камере точки может приходится очень мало текселей
как забороть? теневые карты плоскостей –Храним не глубину, а уравнение всей плоскости в shadow map Вывернуть сцену обратным преобразованием
ШЕЙДЕРЫ!!! Ура товарищи! Будут шейдеры.
Ссылки Book_rus.pdfhttp://ac.cs.nstu.ru/docs/OpenGL/OpenGL_Red Book_rus.pdf /2002/paperit/timo_ahokas.pdfhttp:// /2002/paperit/timo_ahokas.pdf