Teksturowanie (ang. texture mapping) - Radosław...

26
Grafika komputerowa Teksturowanie (ang. texture mapping) Radosław Mantiuk Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny

Transcript of Teksturowanie (ang. texture mapping) - Radosław...

Page 1: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Teksturowanie (ang. texture mapping) Radosław Mantiuk

Wydział Informatyki

Zachodniopomorski Uniwersytet Technologiczny

Page 2: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Tekstura Funkcja modyfikująca wygląd powierzchni. Ta funkcja może być reprezentowana przez bitmapę.

Page 3: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Przykłady: nie tylko modifikacja koloru

Page 4: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Potok teksturowania 1.  Mapowanie tekstury (ang. texture mapping) - obliczenie współrzędnych

parametrycznych (u,v) dla każdego wierzchołka modelu. 2.  Filtrowanie tekstury - obliczenie współrzednych teksela tekstury w rastrze

(s,t) (funkcja korespondera, powiększanie lub pomniejszanie bitmapy). 3.  Nakładanie tekstury - modyfikacja koloru pikseli na etapie rasteryzacji.

Pictures courtasy of MIT, Lecture Notes 6.837

Page 5: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie tekstur •  Obliczenie współrzędnych parametrycznych (u,v), odpowiadających danemu

wierzchołkowi modelu. •  Współrzędne (u,v) wyraża się jako liczby zmiennoprzecinkowe znormalizowane do

przedziału <0,1>.

u

v

(u1,v1) (u2,v2)

(u3,v3)

Page 6: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie tekstur

model

tekstura

Page 7: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie tekstur

Liniowe Cylindryczne Sferyczne

Page 8: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Teksturowanie: mapowanie sferyczne Obliczenie współrzędnych tekstury (u,v) dla puntu na powierzchni kuli (dx,dy,dz) dla kuli o promieniu jednostkowym.

u = 0.5+ arctan2(dz,dx )2π

v = 0.5+arcsin(dy )

π

Page 9: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Funkcje korespondera Funkcje korespondera - powiekszanie tekstury do wymaganego rozmiaru poprzez powielanie.

Page 10: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Współrzędne tekstury •  Obliczenie położenia teksela tekstury odpowiadająceg danemu wierchołkowi •  Zamiania współrzędnych (u,v) -> (s,t)

Filtrowanie tekstur - ma na celu dostosowanie wielkości tekstury do wielkości obszaru, na który tekstura będzie nakładana •  powiększenie i pomniejszenie

W idelanym przypadku tekstura powinna mieć cztery razy więcej tekseli (ang. texels) od liczby pikseli znajdującej się w obszarze obrazu (bufora ramki), na który tekstura jest mapowana.

Page 11: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Filtrowanie tekstur: Metoda najbliższego sąsiada

(u,v)

Przykład pomniejszenia tekstury.

Page 12: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Filtrowanie tekstur: filtracja dwuliniowa

(u,v)

filtrowanie dwuliniowe (ang. bilinear filtering) uśrednianie wartości piksela

Page 13: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

OpenGL: Nakładanie tekstury

Page 14: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

OpenGL: Teksturowanie

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();

Współrzędne interpolowane na etapie rasteryzacji.

Page 15: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

OpenGL: Teksturowanie

GLuint tex; glGenTextures( 1, &tex); glBindTexture( GL_TEXTURE_2D, tex); 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, GL_LINEAR );

// Black/white checkerboard float pixels[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f }; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels); void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * data);

Page 16: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

OpenGL: Typy tekstur

(u,v)

GL_TEXTURE_1D: Images in this texture all are 1-dimensional. They have width, but no height or depth. GL_TEXTURE_2D: Images in this texture all are 2-dimensional. They have width and height, but no depth. GL_TEXTURE_3D: Images in this texture all are 3-dimensional. They have width, height, and depth. GL_TEXTURE_RECTANGLE: The image in this texture (only one image. No mipmapping) is 2-dimensional. Texture coordinates used for these textures are not normalized. GL_TEXTURE_BUFFER: The image in this texture (only one image. No mipmapping) is 1-dimensional. The storage for this data comes from a Buffer Object. GL_TEXTURE_CUBE_MAP: There are exactly 6 distinct sets of 2D images, all of the same size. They act as 6 faces of a cube. GL_TEXTURE_1D_ARRAY: Images in this texture all are 1-dimensional. However, it contains multiple sets of 1-dimensional images, all within one texture. The array length is part of the texture's size. GL_TEXTURE_2D_ARRAY: Images in this texture all are 2-dimensional. However, it contains multiple sets of 2-dimensional images, all within one texture. The array length is part of the texture's size. GL_TEXTURE_CUBE_MAP_ARRAY: Images in this texture are all cube maps. It contains multiple sets of cube maps, all within one texture. The array length * 6 (number of cube faces) is part of the texture size. GL_TEXTURE_2D_MULTISAMPLE: The image in this texture (only one image. No mipmapping) is 2-dimensional. Each pixel in these images contains multiple samples instead of just one value. GL_TEXTURE_2D_MULTISAMPLE_ARRAY: Combines 2D array and 2D multisample types. No mipmapping.

Page 17: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Filtrowanie tekstur - MIP Mapping

MIP Mapping (multium in parvo - wiele w jednym) - sposób przechowywania i szybkiego dostępu do tekstur o różnym rozmiarze.

(u,v)

automatyczne generowanie i obsługa mipmap przez OpenGL

Page 18: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Filtrowanie anizotropowe

Jeżeli proporcje tekstury nie pasują do proporcji obszaru pikseli, na które tekstura ma zostać nałożona.

(u,v)

Page 19: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Filtrowanie perspektywiczne Interpolacja współrzędnych tekstur w trójkącie uwzględniająca trójwymiarowe położenie wierzchołków.

(u,v)

Uwzględnienie głębokości (a konkretniej jej odwro tnośc i ) podczas in te rpo lowan ia współrzędnej tekstury.

Page 20: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie środowiska Ang. Environment Mapping (EM) - wykorzystanie testury do aproksymacji powierzchni odbijających.

Pictures courtasy of MIT, Lecture Notes 6.837

Page 21: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie środowiska

Page 22: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie nierówności (ang. bump mapping)

Bump mapping - wykorzystanie tekstury do modyfikacji wektora normalnego.

(u,v)

Pictures courtasy of MIT, Lecture Notes 6.837

Page 23: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Mapowanie przesunięć (ang. displacement mapping) Displacement mapping - tekstura służy do modyfikacji geometrii obiektu.

(u,v)

Page 24: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Testury proceduralne Wykorzystanie funkcji matematycznych do obliczania wartości tekseli.

(u,v)

•  tekstury trójwymiarowe •  symulacje zjawisk fizycznych (np.

przepływ wody) •  istnieje problem aliasingu i zachowania

ciągłości

Page 25: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Cache'owanie tekstur •  Przesyłanie tekstur do pamięci GPU zajmuje dużo czasu. •  Dostęp do danych tektury jest również czasochłonne. Szybki dostęp do potrzebnej w danym momencie tektury: •  tektury powinny być możliwie najmniejsze, •  wielokąty pogrupowane zgodnie z przynależnością do tektury, •  oddalone wielokąty teksturowane są za pomocą mniejszych obrazów, •  kompresja tekstur (S3TC, ETC)

(u,v)

Page 26: Teksturowanie (ang. texture mapping) - Radosław Mantiukrmantiuk.zut.edu.pl/data/wyklad_gk_teksturowanie.pdf · Grafika komputerowa OpenGL: Typy tekstur (u,v) GL_TEXTURE_1D: Images

Grafika komputerowa

Atlasy tekstur