20111204 computer graphics_galinsky_lecture12_real_time

32
1 RealTime RealTime Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group Компьютерная графика реального времени. URL: http://www.school30.spb.ru/cgsg/cgc/ E-mail: [email protected]

Upload: computer-science-club

Post on 02-Jul-2015

379 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 20111204 computer graphics_galinsky_lecture12_real_time

1

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

URL: http://www.school30.spb.ru/cgsg/cgc/

E-mail: [email protected]

Page 2: 20111204 computer graphics_galinsky_lecture12_real_time

2

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Структура взаимодействия приложения с аппаратурой

APIapplication program interface

Программа

Driver

Graphics Hardware

HALhardware abstraction layer

Page 3: 20111204 computer graphics_galinsky_lecture12_real_time

3

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Библиотеки

• 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/)

Page 4: 20111204 computer graphics_galinsky_lecture12_real_time

4

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 5: 20111204 computer graphics_galinsky_lecture12_real_time

5

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 6: 20111204 computer graphics_galinsky_lecture12_real_time

6

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

GLUT: Callbacks

Page 7: 20111204 computer graphics_galinsky_lecture12_real_time

7

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 8: 20111204 computer graphics_galinsky_lecture12_real_time

8

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Примитивы OpenGL

Page 9: 20111204 computer graphics_galinsky_lecture12_real_time

9

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Вывод OpenGL

Page 10: 20111204 computer graphics_galinsky_lecture12_real_time

10

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Примитивы Direct3D

Page 11: 20111204 computer graphics_galinsky_lecture12_real_time

11

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Вывод Direct3D

Page 12: 20111204 computer graphics_galinsky_lecture12_real_time

12

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 13: 20111204 computer graphics_galinsky_lecture12_real_time

13

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 14: 20111204 computer graphics_galinsky_lecture12_real_time

14

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 15: 20111204 computer graphics_galinsky_lecture12_real_time

15

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Clip + Screen map

Page 16: 20111204 computer graphics_galinsky_lecture12_real_time

16

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Графический конвейер на GPU

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

Page 17: 20111204 computer graphics_galinsky_lecture12_real_time

17

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Шейдера

Page 18: 20111204 computer graphics_galinsky_lecture12_real_time

18

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Shaders

использование

инициализация

Page 19: 20111204 computer graphics_galinsky_lecture12_real_time

19

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Shaders: vertex – закраска Гуро

// Gouraudvarying 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; }

Page 20: 20111204 computer graphics_galinsky_lecture12_real_time

20

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Shaders: fragment (pixel) – закраска Гуро

// Gouraudvarying in vec4 c;

void main( void ){ gl_FragColor = c;}

Page 21: 20111204 computer graphics_galinsky_lecture12_real_time

21

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Shaders: vertex – закраска Фонга

// Phongvarying 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;}

Page 22: 20111204 computer graphics_galinsky_lecture12_real_time

22

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Shaders: fragment (pixel) – закраска Фонга

// Phongvarying 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;}

Page 23: 20111204 computer graphics_galinsky_lecture12_real_time

23

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Stencil buffer, blending & alpha test

Page 24: 20111204 computer graphics_galinsky_lecture12_real_time

24

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Stencil buffer: Shadow volume

Page 25: 20111204 computer graphics_galinsky_lecture12_real_time

25

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Stencil buffer: Shadow Volume

Page 26: 20111204 computer graphics_galinsky_lecture12_real_time

26

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Shadow Map

Page 27: 20111204 computer graphics_galinsky_lecture12_real_time

27

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Анимация

• Синхронизация– 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;

Page 28: 20111204 computer graphics_galinsky_lecture12_real_time

28

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 29: 20111204 computer graphics_galinsky_lecture12_real_time

29

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

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

Page 30: 20111204 computer graphics_galinsky_lecture12_real_time

30

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

Инверсная и прямая кинематика

• Cyclic Coordinate Descent (CCD)

Page 31: 20111204 computer graphics_galinsky_lecture12_real_time

31

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

• 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

Page 32: 20111204 computer graphics_galinsky_lecture12_real_time

32

RealTimeRealTime

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

• Практические задания (до зачетного занятия)– Реализовать простейшую анимацию сферы с

использованием библиотеки OpenGL или Direct3D (со встроенными в библиотеку возможностями фиксированного конвейера, например, освещения)

– К предыдущему заданию добавить освещение, реализованное на шейдерах (предпочтительно на фрагментных/пиксельных для поточечного освещения).

В обоих заданиях не использовать retained библиотек (фигуру построить с использованием базовых примитивов).