Содержание
- 2. Методы создания изображений Точность и реалистичность: Трассировка лучей Излучательность Фотонные карты Скорость: Полигональная графика
- 3. Полигональное представление объектов Для каждой вершины заданы: Координаты вершины Нормаль Координаты текстуры И много чего еще
- 6. GPU vs. CPU > 3 млрд. транзисторов Тактовая частота 700Mhz 1.5GB GDDR5 памяти ??? транзисторов Тактовая
- 7. GPU vs. CPU (4 года назад) 120 млн. транзисторов Тактовая частота 500Mhz 128MB 500MHz памяти 107
- 8. Архитектура GF100
- 9. Буфер кадра Буфер кадра – прямоугольный массив структур 1280 1024
- 10. 2D-ускорители Копирование и перемещение прямоугольных блоков Отрисовка курсора мыши Отрисовка прямых линий и других примитивов Масштабирование
- 11. Графический конвейер T&L: Преобразование и освещение Rasterization: Разбиение примитивов на пиксели Pixel Ops: Запись пиксела в
- 12. 3D-ускорители T&L Rasterization Pixel Ops Прикладная программа OpenGL Direct3D Драйвер Видеокарта “Ускоряются” этапы T&L и растеризации
- 13. Поколение 4: Шейдеры R250-R580 T&L Rasterization Pixel Ops NV25-NV47 dp4 r0.x, v0, c[0] dp4 r0.y, v0,
- 14. OpenGL – многоплатформенная библиотека функций для создания интерактивных 2D и 3D приложений. http://www.opengl.org http://www.opengl.org.ru GLut –
- 15. OpenGL: клиент-сервер /* прикладная программа */ #include #include … glEnable(GL_TEXTURE_2D); glBegin(GL_TRIANGLES); … glTexCoord2d(0.5,0.5); glVertex3f(1.0,0.5,-0.2); … glEnd();
- 16. Что нужно для работы с OpenGL .cpp opengl32.lib gl.h glu32.lib glu.h glut32.lib glut.h opengl32.dll glu32.dll glut32.dll
- 17. Литература (1/5) Ю. Тихомиров. OpenGL. Программирование трехмерной графики, БХВ – Петербург, 2002 Эдвард Энджел. Интерактивная компьютерная
- 18. Литература (2/5) Ву Мейсон, Нейдер Джеки, Девис Том, Шрайнер Дейв. OpenGL. Руководство по программиста. Диа-Софт, 2002.
- 19. Литература (3/5) Гайдуков С.OpenGL. Профессиональное программирование трехмерной графики на C++. - БХВ-Петербург, 2004
- 20. Литература (4/5) Боресков А.В. Расширения OpenGL. - СПб.: БХВ-Петербург, 2005 Дж. Рост OpenGL. Трехмерная графика и
- 21. Литература (5/5) Миллер Т. DirectX 9 с управляемым кодом. Программирование игр и графика. – КомБук, 2005.
- 22. Где взять GLut? http://www.opengl.org/developers/ documentation/glut/index.html http://www.xmission.com/~nate/glut.html http://www.xmission.com/~nate/glut/glut-3.7.6-bin.zip http://www.xmission.com/~nate/glut/glut-3.7.6-src.zip Где прочитать про GLut? http://www.opengl.org.ru/coding/glut/ - работа с
- 23. Самая простая программа #include #include void reshape(int w, int h) { /* Здесь обрабатываем изменение размеров
- 24. Работа с буфером кадра void glClear(GLenum buffers); buffers = GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT| GL_ACCUM_BUFFER_BIT| GL_STENCIL_BUFFER_BIT void glClearColor(GLclampf red,GLclampf
- 25. Преобразование координат: viewport void glViewport(GLint x,GLint y, GLsizei w,GLsizei h); w h void glDepthRange(GLclampd n,GLclampd f);
- 26. Рисуем куб x y z Видимые грани: 7-6-5-4 6-7-3-2 7-5-1-3 Невидимые грани: 4-0-1-5 4-6-2-0 0-2-3-1
- 27. Команды OpenGL glVertex3fv ( v ) 2 – (x, y) 3 – (x, y, z) 4
- 28. Модель begin/end void glMatrixMode(…); void glLoadIdentity(); void glMultMatrixd(…); void glBegin(GLenum type); void glVertex(…); void glNormal(…); void
- 29. Формирование граней из вершин 1 0 2 3 4 5 GL_TRIANGLES: 0 1 3 2 4
- 30. Однородные координаты Общее аффинное преобразование сводится к умножению на матрицу Проецирование также сводится к умножению на
- 31. Преобразование координат Отсечение: Viewport Vi={Ps,RGBA,…}
- 32. Матрицы преобразований void glMatrixMode(Glenum mode); mode={GL_MODELVIEW|GL_PROJECTION} void glLoadIdentity(); void glMultMatrixd(GLdouble c[16]); Выбираем матрицу преобразований для изменения:
- 33. Матрицы преобразований. Продолжение void glTranslated(GLdouble x, GLdouble y, GLdouble z); void glScaled(GLdouble x, GLdouble y, GLdouble
- 34. Как работает gluPerspective? X Y Z 0 O1 O2 A1 B1 C1 D1 A2 B2 C2
- 35. gluPerspective: продолжение
- 36. Уменьшение количества вершин 1 0 2 3 4 5 GL_TRIANGLE_FAN: 3n vs. 1+n, n>1 1 0
- 37. Виртуальная камера gluLookAt( eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz) Настройка виртуальной камеры eye
- 38. Лицевые и нелицевые грани void glFrontFace(GLenum type); type = {GL_CW|GL_CCW} void glCullFace(GLenum type); type = {GL_FRONT|GL_BACK
- 39. Дисплейные списки GLuint n = glGenLists(1); glNewList(n,GL_COMPILE); glEndList(); Дисплейный список (display list) – запомненная последовательность команд
- 40. Z-буфер Необходимо создать z-буфер glutDisplayMode(GLUT_DEPTH|/*…*/); Перед рисованием сцены очистить z-буфер glClear(GL_DEPTH_BUFFER_BIT|/*…*/); Включить или выключить сравнение z
- 41. Стек матриц glLoadIdentity(); glTranslated(…); glPushMatrix(); glRotated(…); glPopMatrix(); glPushMatrix(); glRotataed(…); glPopMatrix(); E T T T*R1 T T*R2
- 42. Рисуем тор x y z φ 0 X Z Y ϕ P Q Qi,j Qi+1,j Qi+1,j+1
- 43. Уравнение освещенности по Фонгу l n r P’ e Фоновое освещение не имеет источника и зависит
- 44. Модели Блинна и Шлика Вычисление отраженного вектора – трудоемкая операция (Блинн) Возведение в степень также работает
- 45. Уравнение освещенности OpenGL еm ,am , sm , dm , hm – свойства материала ai ,si
- 46. Установка параметров освещения в OpenGL void glMaterialfv(GLenum face,GLеnum param,GLfloat *value); face = {GL_FRONT|GL_BACK} param = {GL_AMBIENT|GL_DIFFUSE|GL_EMISSIVE|GL_SPECULAR}
- 47. Установка параметров освещения. Часть 2. void glLightfv(GLenum light, GL_POSITION,GLfloat *value); face = {GL_LIGHT0|GL_LIGHT1|…} value = float[4]
- 48. Интерполяция цвета Вычислить цвет (RGB) в каждой вершине. Вычислить цвет в точках P1 и P2: s
- 49. Недостатки закраски по Гуро
- 50. Интерполяция нормали Вычислить нормали (RGB) в каждой вершине. Вычислить нормаль в точках P1 и P2: s
- 51. Массивы вершин void glVertexPointer(GLint size,GLenum type, GLsizei stride,const GLvoid *pointer; Задаем массив вершин, нормалей и текстурных
- 52. Растеризация V1 V2 V3 Интерполяция цвета вдоль примитива - закраска по Гуро Интерполяция координаты z
- 53. I=0 I=0 I=1 I=1 I=0 I=0 I=1 I=1 Ошибки линейной интерполяции Освещенность зависит от способа разбиения
- 54. Текстурирование u v 0 x y 0 “Перспективное” текстурирование: 1 1 x1,y1,u1,v1 x2,y2,u2,v2 x3,y3,u3,v3
- 55. Текстурирование в OpenGL GLuint texture; glGenTextures(1,&texture); Создаем текстуру - прямоугольный массив с цветами пикселов. Высота и
- 56. Текстурирование в OpenGL: часть 2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- 57. Текстурирование в OpenGL: часть 3 Разрешаем текстурирования Задаем текстурные координаты (обычно для каждой вершины) glEnable(GL_TEXTURE_2D); glTexCoord2d(u,v);
- 58. Как загрузить картинку из файла? Воспользоваться любой другой сторонней библиотекой Функции BmpLoad из примеров: Классы из
- 59. Фильтрация текстур Выборка ближайшего текселя GL_NEAREST: Линейная комбинация 4-x соседних пикселей GL_LINEAR:
- 60. Свертка текстурных координат glTexParameteri(…,GL_REPEAT); glTexParameteri(…,GL_REPEAT); glTexParameteri(…,GL_CLAMP); glTexParameteri(…,GL_REPEAT); glTexParameteri(…,GL_REPEAT); glTexParameteri(…,GL_CLAMP); glTexParameteri(…,GL_CLAMP); glTexParameteri(…,GL_CLAMP);
- 61. Фильтрация текстур: mipmapping увеличение текстуры масштаб 1:1 уменьшение текстуры увеличение текстуры масштаб 1:1 уменьшение текстуры в
- 62. Фильтрация текстур: mipmapping. Часть 2 256x256, λ=0 64x64, λ=2 16x16, λ=4 Трилинейная фильтрация GL_LINEAR_MIPMAP_LINEAR
- 63. Анизотропная фильтрация Экран Расширение “GL_EXT_texture_filter_anisotropic”
- 64. Текстура и освещение RGBAf из модуля T&L RGBAt текстуры RGBAс результат + = Модулирование GL_MODULATE (по
- 65. Генерация текстурных координат Линейная зависимость Environment mapping - эффект отражающей поверхности r n h P’ (u,v)
- 66. Генерация текстурных координат. Продолжение Включаем автоматическую генерацию текстурных координат (для первыхдвух координат) glEnable(GL_TEX_GEN_S); glEnable(GL_TEX_GEN_T); Включаем автоматическую
- 67. Использование текстуры как фонового изображения Устанавливаем ортогональную проекцию glMatrixMode(GL_PROJECTION); glLoadIndentity(); glOrtho(-1,1,-1,1,-1,1); Устанавливаем ортогональную проекцию glMatrixMode(GL_MODELVIEW); glLoadIndentity();
- 68. Преобразование текстурных координат Работаем с матрицей T точно также как с M и P. glMatrixMode(GL_TEXTURE); glLoadIdentity();
- 69. Пиксельные операции T&L Rasterization Pixel Ops Буфер кадра Буфер глубины Буфер трафарета Буфер аккумулятора
- 70. Пиксельные операции. Продолжение. Scissor test Alpha test Stencil test Depth test Blending Stencil Buffer: Sij Z
- 71. Scissor & Alpha test Не записывать пиксел Не записывать пиксел Нет Нет Да Да glScissor(x,y,w,h); glEnable(GL_SCISSOR_TEST);
- 72. Смешение цветов glEnable(GL_BLEND); glDisable(GL_BLEND); glBlendFunc(sfactor,dfactor) Команды OpenGL: glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA): glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA): glBlendFunc(GL_ZERO,GL_SRC_COLOR):
- 73. Карты освещенности (lightmaps) (i,j) Карта освещенности: Мультитекстурирование: Экономия количества примитивов при динамическом освещении Экономия текстур при
- 74. Смещение вершин При использовании буфера глубины могут возникнуть проблемы с рисование граней, лежащих в одной плоскости.
- 75. Мультитекстурирование F(RGBAc,RGBA0) RGBA0 Texture 0 Lighting RGBAc RGBA1 Texture 1 RGBAf F(RGBAf,RGBA1) Объединение текстуры объекта и
- 76. Расширения OpenGL Читаем спецификацию расширения (ARB_multitexture) Определяем константы … #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define
- 77. Расширения OpenGL. Продолжение Получаем список доступных расширений char *extensions = glGetString(GL_EXTENSIONS);
- 78. Расширения OpenGL. Часть 3. Получаем указатели на функции … glActiveTexture = wglGetProcAddress("glActiveTextureARB"); glMultiTexCoord2d = wglGetProcAddress("glMultiTexCoord2dARB"); …
- 79. Расширения OpenGL. Часть 4. Задаем смешение цвета освещения и цвета первой текстуры … (*glActiveTexture)(GL_TEXTURE0_ARB); glTexEnvi(…); …
- 80. Полупрозрачные объекты Полупрозрачная грань - грань через часть пикселов которой видно лежащие за ней грани. Полупрозрачные
- 81. Буфер трафарета и буфер глубины RGBAx,y=F(RGBAx,y,RGBAf) Изменение Sx,y Изменение Sx,y Изменение Sx,y Да Да Нет Нет
- 82. Буфер трафарета: видимость пикселей true Sx,y=1 для грани F - Запись пикселя Да Да Нет F
- 83. Буфер трафарета: обработка пикселей Sx,y==1? - - Запись пикселя Да Да Нет - Нет F F
- 84. Буфер трафарета: тени и отражения Отбрасывание тени на плоскую грань Правильно Неправильно Отражения и порталы
- 85. Буфер трафарета: теневые объемы Строим теневой объем Рисуем затеняемый объект со включенным Z-буфером Z Y …
- 86. Теневые объемы. Продолжение. Рисуем нелицевые грани теневого объема Z Y … glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS,1,1); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
- 87. Теневые объемы. Часть 3. Рисуем лицевые грани теневого объема Z Y … glStencilFunc(GL_ALWAYS,1,1); glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT);
- 88. Теневые объемы. Часть 4. Возможен вывод граней теневого объема в произвольном порядке. Z Y … glStencilFunc(GL_ALWAYS,1,1);
- 89. Теневые объемы. Часть 5. Рисуем затененную часть объекта Z Y … glStencilFunc(GL_EQUAL,1,1); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); …
- 90. Кубические карты: определение. V t R Точка R = R(t), t = (p,q,r) определяет одну из
- 91. Кубические карты среды. n P’ е r R Необходимо применить к текстурным координатам преобразование, обратное модельно-видовому!
- 92. Кубические карты освещения. t P’ Пусть источники освещения находятся далеко от объекта. Тогда освещение в точке
- 93. Построение отражающего объекта. O Переносим наблюдателя в центр отражающего объекта и строим изображение, полученное при взгляде
- 95. Скачать презентацию