'

Компьютерная графика реального времени.

Понравилась презентация – покажи это...





Слайд 0

1 Компьютерная графика реального времени. URL: http://www.school30.spb.ru/cgsg/cgc/ E-mail: CGSG@yandex.ru


Слайд 1

2 Структура взаимодействия приложения с аппаратурой API application program interface Программа Driver Graphics Hardware HAL hardware abstraction layer


Слайд 2

3 Библиотеки Open GL – open graphics library (SGI, 90-е годы, версии 1.0-4.2) GLUT - OpenGL Utility Toolkit (http://www.opengl.org/resources/libraries/glut/) GLEW - OpenGL Extension Wrangler Library (http://glew.sourceforge.net/) GLM - OpenGL Mathematics (http://glm.g-truc.net/) . . . Microsoft Direct3D – часть MS DirectX (1992 RenderMorphics, версии 2.0-11.0) D3DX – retained mode toolkit XNA - Xbox New Architecture (http://msdn.microsoft.com/ru-ru/xna/)


Слайд 3

4 Инициализация OpenGL


Слайд 4

5 Инициализация OpenGL: GLUT


Слайд 5

6 GLUT: Callbacks


Слайд 6

7 Инициализация Direct3D


Слайд 7

8 Примитивы OpenGL


Слайд 8

9 Вывод OpenGL


Слайд 9

10 Примитивы Direct3D


Слайд 10

11 Вывод Direct3D


Слайд 11

12 Общая архитектура


Слайд 12

13 Геометрическая фаза


Слайд 13

14 Видовые преобразования & проецирование


Слайд 14

15 Clip + Screen map


Слайд 15

16 Графический конвейер на GPU зеленый – полностью программируемый этап желтый – конфигурируемый и непрограммируемый синий – полностью фиксированный


Слайд 16

17 Шейдера


Слайд 17

18 Shaders использование инициализация


Слайд 18

19 Shaders: vertex – закраска Гуро // Gouraud varying out vec4 c; uniform vec4 spec; uniform vec3 eyepos; uniform vec4 diff; uniform vec4 amb; uniform float spower; uniform float time; void main( void ) { vec3 p = vec3(gl_ModelViewMatrix * gl_Vertex); // transformed point to world space vec3 campos = vec3(eyepos); // camera position vec3 l = vec3(sin(time), 0, cos(time)); // vector to light position vec3 v = campos - p; // vector to the camera vec3 n = gl_NormalMatrix * gl_Normal; // transformed normal gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; const vec4 diffcolor = vec4(diff); // diffuse const vec4 speccolor = vec4(spec); // specular const vec4 ambcolor = vec4(amb); // ambient const vec4 specpower = vec4(spower); // specular power vec3 n2 = normalize(n); vec3 l2 = normalize(l); vec3 v2 = normalize(v); vec3 r = reflect(-v2, n2); vec4 diff = diffcolor * max(dot(n2, l2), 0.0); vec4 spec = speccolor * pow(max(dot(l2, r), 0.0), specpower); c = diff + spec + ambcolor; }


Слайд 19

20 Shaders: fragment (pixel) – закраска Гуро // Gouraud varying in vec4 c; void main( void ) { gl_FragColor = c; }


Слайд 20

21 Shaders: vertex – закраска Фонга // Phong varying out vec3 l; varying out vec3 v; varying out vec3 n; uniform vec3 eyepos; uniform float time; void main( void ) { vec3 p = vec3(gl_ModelViewMatrix * gl_Vertex); // transformed point to world space vec3 campos = vec3(eyepos); // camera position l = vec3(sin(time), 0, cos(time)); // vector to light position v = campos - p; // vector to the camera n = gl_NormalMatrix * gl_Normal; // transformed normal gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }


Слайд 21

22 Shaders: fragment (pixel) – закраска Фонга // Phong varying in vec4 c; varying in vec3 l; varying in vec3 v; varying in vec3 n; uniform vec4 diff; uniform vec4 spec; uniform vec4 amb; uniform float spower; void main( void ) { const vec4 diffcolor = vec4(diff); // diffuse const vec4 speccolor = vec4(spec); // specular const vec4 ambcolor = vec4(amb); // ambient const vec4 specpower = vec4(spower); // specular power vec3 n2 = normalize(n); vec3 l2 = normalize(l); vec3 v2 = normalize(v); vec3 r = reflect(-v2, n2); vec4 diff = diff * max(dot(n2, l2), 0.0); vec4 spec = spec * pow(max(dot(l2, r), 0.0), spower); gl_FragColor = amb + diff + spec; }


Слайд 22

23 Stencil buffer, blending & alpha test


Слайд 23

24 Stencil buffer: Shadow volume


Слайд 24

25 Stencil buffer: Shadow Volume


Слайд 25

26 Shadow Map


Слайд 26

27 Анимация Синхронизация clock_t start; . . . dt = (clock() - start) / (double)CLOCKS_PER_SEC; LARGE_INTEGER Start, Quant; QueryPerformanceFrequency(&Quant); QueryPerformanceCounter(&Start); . . . QueryPerformanceCounter(&Time); dt = (Time.QuadPart - Start.QuadPart) / (double)Quanty.QuadPart;


Слайд 27

28 Ключевые кадры (key frame)


Слайд 28

29 Сеточная анимация


Слайд 29

30 Инверсная и прямая кинематика Cyclic Coordinate Descent (CCD)


Слайд 30

31 Tomas Akenine-Moller, Eric Haines, Naty Hoffman, “Real-Time Rendering”, Third Edition, AK Peters-2008 Andrew S. Glassner (ed.), Eric Haines, Pat Hanrahan, Robert L. Cook, James Arvo, David Kirk, Paul S. Heckbert, "An Introduction to Ray Tracing (The Morgan Kaufmann Series in Computer Graphics)", Academic Press-1989. Matt Pharr, Greg Humphreys, "Physically Based Rendering, Second Edition: From Theory To Implementation", Morgan Kaufmann-2010 David S. Ebert, F. Kenton Musgrave, Darwyn Peachey, Ken Perlin, Steve Worley, "Texturing and Modeling, Third Edition: A Procedural Approach (The Morgan Kaufmann Series in Computer Graphics)”, Morgan Kaufmann-2002


Слайд 31

32 Практические задания (до зачетного занятия) Реализовать простейшую анимацию сферы с использованием библиотеки OpenGL или Direct3D (со встроенными в библиотеку возможностями фиксированного конвейера, например, освещения) К предыдущему заданию добавить освещение, реализованное на шейдерах (предпочтительно на фрагментных/пиксельных для поточечного освещения). В обоих заданиях не использовать retained библиотек (фигуру построить с использованием базовых примитивов).


×

HTML:





Ссылка: