Potok graficzny 3D
-
Upload
doannguyet -
Category
Documents
-
view
241 -
download
0
Transcript of Potok graficzny 3D
Grafika komputerowa
Potok graficzny 3D Radosław Mantiuk
Wydział Informatyki
Zachodniopomorski Uniwersytet Technologiczny
Grafika komputerowa
System graficzny
Dane wejściowe
scena 3D algorytm graficzny obraz 2D
Algorytm tworzący obraz wyjściowy na podstawie sceny 3D
Dane wyjściowe
System graficzny czasu rzeczywistego
Oświetlenie lokalne
Grafika komputerowa
Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do
wygenerowania obrazu wyjściowego 2D. - Definicja geometrii obiektów 3D. - Definicja materiałów pokrywających obiekty.
- Kolor powierzchni obiektów. - Tekstura. - Własności powierzchni.
- Kamera. - Źródła światła. - Parametry środowiska (mgła, dym, itp.).
Scena 3D
KAMERA
OBIEKTY
ŚWIATŁO
Grafika komputerowa
Sceny 3D - Parametry środowiska Parametryzacja przestrzeni sceny.
Mgła
Grafika komputerowa
Scena 3D - Reprezentacje geometrii obiektów
Reprezentacja obiektów geometrycznych - obiekty parametryczne opisane równaniami matematycznymi, - reprezentacja wielokątowa, - obiekty złożone, - reprezentacja fraktalna, - krzywe i powierzchnie, - obiekty CSG.
Grafika komputerowa
Scena 3D - Modelowanie 3D
Grafika komputerowa
Scena 3D - Reprezentacja wielokątowa (1) § Trójkąt - obiekt podstawowy (współpłaszczyznowość wierzchołków trójkąta) § Duża liczba identycznych obiektów: wykorzystanie tych samych algorytmów
do przetwarzania wszystkich obiektów (architektura SIMD kart graficznych).
§ Ograniczona dokładkość odwzorowania powierzchni krzywoliniowych (aproksymacje powierzchni krzywoliniowych).
§ Duża liczba obiektów potrzebna do zbudowania prostego kształtu geom. (przykład kuli).
Grafika komputerowa
Scena 3D - Reprezentacja wielokątowa (2) Optymalizacja reprezentacji wielokątowej - unikanie powtórzeń definicji
wierzchołków.
konfiguracja „fan”
konfiguracja „mesh”
v8 v9
v10
konfiguracja „strip”
Grafika komputerowa
Scena 3D - Reprezentacja hierarchiczna Obiekty złożone składają się z wielu obiektów podstawowych. Powtarzające się elementy reprezentowane są za pomocą transformacji geometrycznych.
Courtesy of Andries van Dam
Grafika komputerowa
Potok graficzny czasu rzeczywistego
Aplikacja
Przetwarzanie geometrii
Rasteryzacja
Grafika komputerowa
Transformacje geometrii
Grafika komputerowa
OpenGL: Reprezentacja obiektów - trójkąty Definiowanie trójkąta (ang. triangle) oraz czworoboku (ang. quad).
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, +1.0f, 0.0f ); glVertex3f( -1.0f, 0.0f, 0.0f ); glVertex3f( +1.0f, -1.0f, 0.0f );
glEnd();
glBegin(GL_QUADS); glNormal3f( 0, 0, -1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -0.5f, +0.5f, -0.5f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( +0.5f, +0.5f, -0.5f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( +0.5f, -0.5f, -0.5f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -0.5f, -0.5f, -0.5f );
glEnd();
glutSolidSphere()
Grafika komputerowa
OpenGL: Tworzenie obiektów
Grafika komputerowa
OpenGL: Tworzenie obiektów
glutSolidCube(1)
Grafika komputerowa
OpenGL: Tworzenie obiektów
glScalef( 1.5f, 3.0f, 1.5f ); glutSolidCube(1);
Grafika komputerowa
OpenGL: Tworzenie obiektów
glRotatef( 10.0f, 0.0f, 1.0f, 0.0f ); glRotatef( 60.0f, 1.0f, 0.0f, 0.0f ); glScalef( 1.5f, 3.0f, 1.5f ); glutSolidCube(1);
Grafika komputerowa
OpenGL: Tworzenie obiektów
glTranslatef( 1.0f, 1.0f, 0.0f ); glRotatef( 10.0f, 0.0f, 1.0f, 0.0f ); glRotatef( 60.0f, 1.0f, 0.0f, 0.0f ); glScalef( 1.5f, 3.0f, 1.5f ); glutSolidCube(1);
Grafika komputerowa
OpenGL: Tworzenie obiektów
glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glPushMatrix();
glTranslatef( 1.0f, 1.0f, 0.0f ); glRotatef( 10.0f, 0.0f, 1.0f, 0.0f ); glRotatef( 60.0f, 1.0f, 0.0f, 0.0f ); glScalef( 1.5f, 3.0f, 1.5f ); glutSolidCube(1);
glPopMatrix();
macierz transformacji obiektów
x '
y'
z '
1
!
"
#####
$
%
&&&&&
=
r11sx r12 r13 txr21 r22sy r23 tyr31 r32 r33sz tz0 0 0 1
!
"
#####
$
%
&&&&&
xyz1
!
"
####
$
%
&&&&
Grafika komputerowa
OpenGL: Kolejność przekształceń
glRotatef( 45.0f, 0.0f, 0.0f, 1.0f ); glTranslatef( 2.0f, 0.0f, 0.0f ); glutWireCube( 1 );
glTranslatef( 2.0f, 0.0f, 0.0f ); glRotatef( 45.0f, 0.0f, 0.0f, 1.0f ); glutWireCube( 1 );
M' = M * R * T
M' = M * T * R
Grafika komputerowa
OpenGL: hierarchia obiektów glPushMatrix(); glRotatef( 20.0f, 0.0f, 1.0f, 0.0f ); glRotatef( 10.0f, 1.0f, 0.0f, 0.0f );
glPushMatrix();
glScalef( 0.7f, 0.7f, 0.7f ); glTranslatef( 1.2f, 1.0f, 0.0f ); glutWireSphere( 1, 20, 20 );
glPopMatrix();
glPushMatrix(); glScalef( 0.7f, 0.7f, 0.7f ); glTranslatef( -1.2f, 1.0f, 0.0f ); glutWireSphere( 1, 20, 20 );
glPopMatrix();
glPushMatrix(); glScalef( 0.5f, 1.0f, 1.0f ); glTranslatef( 0.0f, -0.7f, 0.0f ); glutWireCube( 1 );
glPopMatrix();
glPushMatrix(); glScalef( 2.0f, 0.5f, 1.0f ); glTranslatef( 0.0f, -3.5f, 0.0f ); glutWireCube( 1 );
glPopMatrix();
glPopMatrix();
Grafika komputerowa
Kamera otworkowa (ang. pinhole camera)
Kamera “komputerowa” symuluje kamerę otworkową z nieskończenie małym otworem przesłony, bez soczewek.
Grafika komputerowa
Scena 3D: Definicja kamery § Definiuje jaka część przestrzeni trójwymiarowej będzie widoczna na
wyjściowym obrazie 2D. § Określa sposób rzutowania (prostokątne, perspektywiczne, itp.).
€
eyep
fovY
€
up
€
lookp§ kąt patrzenia FOV (ang. Field of View) § punkt położenia kamery § punkt, na który patrzy kamera § orientacja obrazu § aspekt (ang. aspect ratio)
Courtesy of Andries van Dam
Grafika komputerowa
Scena 3D: Field of View
kąt patrzenia (FOV)
powierzchnie obcinające (ang. clipping planes)
Courtesy of Andries van Dam
Grafika komputerowa
OpenGL: Kamera
glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective( fovy, aspect, zNear, zFar ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( eyepX, eyepY, eyepZ, lookpX, lookpY, lookpZ, upX, upY, upZ );
macierz projekcji (GL_PROJECTION)
gluPerspective( 50, 1, 1, 1000); gluLookAt( 0, 0, 7, 0, 0, 0, 0, 1, 0 );
eyep
lookp
zNear
zFar
up
X
Z
Y
Grafika komputerowa
OpenGL: Transformacje geometryczne
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
Grafika komputerowa
OpenGL: Transformacja z układu modelu do widoku
MModelView = MView * MModel
gluLookAt(...) glScale() glTranslate() glRotate()
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
xcamycamzcam1
!
"
#####
$
%
&&&&&
=MmodelView
xobjyobjzobj1
!
"
#####
$
%
&&&&&
=Mview •Mmodel
xobjyobjzobj1
!
"
#####
$
%
&&&&&
Grafika komputerowa
OpenGL: Transformacja z układu modelu do widoku
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
Grafika komputerowa
OpenGL: Rzutowanie oraz clipping Macierz GL_PROJECTION
gluPerspective(...)
void gluPerspective(double fovY, double aspectRatio, double front, double back) { const double DEG2RAD = 3.14159265 / 180; double tangent = tan(fovY/2 * DEG2RAD); // tangent of half fovY double height = front * tangent; // half height of near plane double width = height * aspectRatio; // half width of near plane // params: left, right, bottom, top, near, far glFrustum(-width, width, -height, height, front, back); }
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
Grafika komputerowa
OpenGL: Rzutowanie oraz clipping Macierz GL_PROJECTION
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra) xclipw
yclipw
zclipw
w
!
"
#####
$
%
&&&&&
=
2 ⋅nearright − left
0 −(right + left)right − left
0
0 2 ⋅nearbottom− top
−(bottom+ top)bottom− top
0
0 0 far + nearfar − near
−2 ⋅near ⋅ farfar − near
0 0 1 0
!
"
#########
$
%
&&&&&&&&&
xcamycamzcam1
!
"
#####
$
%
&&&&&
Grafika komputerowa
OpenGL: Rzutowanie oraz clipping
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
Rzut perspektywiczny
Rzut prostokątny
gluOrtho2D(...)
gluOrtho2D(...)
Grafika komputerowa
OpenGL: Clipping (obcinanie)
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
Clipping usuwanie obiektów znajdujących się poza polem widzenia, obiekty częściowo znajdujące się w polu widzenia są dzielone na mniejsze
Culling - usuwanie obiektów zasłoniętych przez inne obiekty (np. ang. backface culling).
Grafika komputerowa
OpenGL: NDC oraz współrzędne ekranu
Normalised Device Coordinates (NDC) dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
xndcyndczndc
!
"
####
$
%
&&&&
=
xclip /w
yclip /w
zclip /w
!
"
####
$
%
&&&&
Grafika komputerowa
OpenGL: NDC oraz współrzędne ekranu
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
xw =xndc +12
⋅width
yw =yndc +12
⋅height
(0,0)
(w,h)
Współrzędne ekranu:
Grafika komputerowa
OpenGL: NDC oraz współrzędne ekranu
Współrzędne okna na ekranie: glViewport(x, y, w, h);
dane wierzchołków
macierz ModelView
macierz Projection
dzielenie przez w
transformacja okna widzenia
współ. obiektu
współ. kamery
współ. obcinania
współ. znormal. (NDC)
współ. ekranu (rastra)
xwywzw
!
"
####
$
%
&&&&
=
width2
xndc + (x +width2
)
height2
yndc + (y+height2
)
far − near2
zndc +far + near
2
!
"
#######
$
%
&&&&&&&
Grafika komputerowa
Model oświetlenia
Grafika komputerowa
Scena 3D: Źródła światła (1) Emisja fali elektromagnetycznej w zakresie widzialnym.
światło punktowe
(point light)
światło kierunkowe
(distant light)
światło stożkowe
(spot light)
Grafika komputerowa
Scena 3D: Źródła światła (2) Naturalne źródła światła - generowanie miękkich cieni (ang. soft shadows).
światło liniowe
(linear light)
światło powierzchniowe
(area light)
Grafika komputerowa
OpenGL: Punktowe źródła światła
glEnable( GL_NORMALIZE ); // włączenie automatycznej normalizacji wektorów po skalowaniu float g_lightPos[4] = { 0.0f, 0.0f, 2.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_POSITION, g_lightPos); GLfloat color[] = { 1.0f, 1.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_AMBIENT, color); glLightfv(GL_LIGHT1, GL_DIFFUSE, color); glLightfv(GL_LIGHT1, GL_EMISSION, color); glLightfv(GL_LIGHT1, GL_SPECULAR, color); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING);
Grafika komputerowa
OpenGL: Kierunkowe źródła światła
glEnable( GL_NORMALIZE ); // włączenie automatycznej normalizacji wektorów po skalowaniu float g_lightDir[4] = { 0.0f, 0.0f, -1.0f, 0.0f }; glLightfv(GL_LIGHT1, GL_POSITION, g_lightPos); GLfloat color[] = { 1.0f, 1.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_AMBIENT, color); glLightfv(GL_LIGHT1, GL_DIFFUSE, color); glLightfv(GL_LIGHT1, GL_EMISSION, color); glLightfv(GL_LIGHT1, GL_SPECULAR, color); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING);
Grafika komputerowa
OpenGL: Źródła światła typu spot
glEnable( GL_NORMALIZE ); // włączenie automatycznej normalizacji wektorów po skalowaniu float g_lightPos[4] = { 0.0f, 0.0f, 2.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_POSITION, g_lightPos); GLfloat color[] = { 1.0f, 1.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_AMBIENT, color); glLightfv(GL_LIGHT1, GL_DIFFUSE, color); glLightfv(GL_LIGHT1, GL_EMISSION, color); glLightfv(GL_LIGHT1, GL_SPECULAR, color); // dodatkowe parametry glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,95.0); // kąt odcięcia pola świecenia glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,2.0); // współczynnik osłabienia glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotDir); // kierunek świecenia glEnable(GL_LIGHT1); glEnable(GL_LIGHTING);
Grafika komputerowa
Scena 3D: Materiał Dla materiałów definiuje się ich własności odbijania światła.
ambient diffuse specular
ambinet + diffuse ambinet + diffuse + specular
Grafika komputerowa
OpenGL: Materiał
float colw[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; glMaterialfv( GL_FRONT, GL_SPECULAR, colw); glMaterialf( GL_FRONT, GL_SHININESS, 40.0f ); float col[4] = { 0.01f, 0.6f, 0.01f, 1.0f }; glMaterialfv( GL_FRONT, GL_DIFFUSE, col); float cola[4] = { 0.01f, 0.2f, 0.01f, 1.0f }; glMaterialfv( GL_FRONT, GL_AMBIENT, cola);
Grafika komputerowa
Scena 3D: Materiał - Rodzaje powierzchni Własności powierzchni obiektów: - powierzchnie rozpraszające, - powierzchnie odbijające (lustrzane), - powierzchnie załamujące (przezroczyste).
powierzchnia rozpraszająca (ambient + diffuse)
powierzchnia odbijająca (specular) - kąt padania równy jest kątowi odbicia
powierzchnia załamująca
Grafika komputerowa
Rasteryzacja
Grafika komputerowa
Rasteryzacja (ang. rasterization) Operacje wykonywane w przestrzeni rastrowej, prowadzące do obliczenia koloru RGB wszystkich pikseli wyjściowego obrazu rastrowego i umieszczenie ich we buforze ramki (ang. frame buffer).
Przygotowanie danych trójkątów (ang. triangle setup)
Wypełnianie trójkątów (ang. scan conversion)
Cieniowanie pikseli (ang. pixel shading)
Łączenie danych (ang. merging)
Grafika komputerowa
Wypełnianie trójkątów (ang. scan conversion)
Określanie, które fragmenty trókątów należą do poszczególnych pikseli obrazu.
Grafika komputerowa
Rasteryzacja trójkąta - Ang. Edge walking
Pictures courtesy of MIT (lecture 6.837)
Brzegowa (ang. edge walking) 1. Posortowanie wierzchołków w kierunkach x i y, wybranie kierunku wypełniania (np. z
lewej do prawej i z góry na dół). 2. Obliczenie pikseli brzegowych dla każdej poziomej linii (ang. spans). 3. Wypełnianie liniami poziomymi od punktu p0 do p2.
• Bardzo szybki algorytm.
Grafika komputerowa
Cieniowanie pikseli (ang. pixel shading) Obliczanie kolorów fragmentów trójkątów.
Grafika komputerowa
Teksturowanie Modyfikacja koloru pikseli
Grafika komputerowa
Łączenie danych (ang. merging)
• Obliczenie koloru RGB pikseli na podstawie danych fragmentów poszczególnych trójkątów obejmujących ten piksel.#• Umieszczenie danych w buforze kolorów/ramki (ang. frame buffer)#• Obliczanie widoczności (bufor Z).#• Obliczanie przezroczystości (kanał Alfa).#• Mieszanie za pomocą bufora szablonu (ang. stencil buffer).#• Wykorzystanie bufora akumulacyjnego (ang. accumulation buffer).#• Wykorzystanie podwójnego buforowania (ang. double buffering).#
fragment - zbiór danych, na podstawie których oblicza się kolor piksela
Grafika komputerowa
Testowanie widoczności obiektów Bufor Z (ang. Z-buffer) Miejsce w pamięci osobne dla każdego piksela przeznaczone na zapamiętanie aktualnej wartości Z piksela. Wielkość bufora Z decyduje o precyzji testowania widoczności (obecnie stosuje się Z-bufory 32-bitowe).
Wartość bufora uaktualniana jest dla każdego piksela w każdym kolejnym trójkącie.
Wartości z dla pikseli z wnętrza trójkąta są interpolowane na podstawie położenia wierzchołków trójkąta.
Grafika komputerowa
Potok graficzny Scena 3D • wielokąty (położenie wierzchołków XYZ)) • kolory (wektor RGB) • wektory normalne (N) • tekstury (współ. tektury (u,v))
bufor ramki (ang. frame buffer)
transformacja modelu i widoku (współ. lokalne do współ. kamery)
rzutowanie (macierz rzutowania)
przejście do współ. rastrowych
clipping
teksturowanie
cieniowanie
pomijanie niewidocznych pikseli (bufor Z)
• Wykonywanie kolejnych operacji, dane wyjściowe z danej operacji są wejściem dla kolejnej. • Potok akumuluje błędy. • Zakres informacji nie powiększa się w kolejnych krokach potoku.
Grafika komputerowa
Literatura 1. Tomas Akenine-Moller, Eric Haines, Naty Hoffman, Real-Time Rendering (3rd
edition), A K Peters, 2008.