to get the file

Transkrypt

to get the file
Laboratorium nr 9
Instrukcja
Laboratoryjna
9
1/4
Programowanie Grafiki Komputerowej
Temat: Cube Environment Mapping
Przygotował: mgr inż. Grzegorz Pawiński
1) Cube Environment Mapping
Cube Environment Mapping (sześcienne mapowanie środowiskowe) jest to technika
teksturowania, która wykorzystuje kierunkowy wektor 3D. 6 tekstur 2D, które tworzą ściany
sześcianu, składa się na teksturę 3D. Tekstura 3D jest odworowaniem otaczającego środowiska.
Tekstury 2D są przyporządkowane do ścian sześciany w sposób pokazany na rys. 1.
Rys. 1 Przyporządkowanie tekstur 2D do ścian sześcianu[1].
2) Cube Environment Mapping w OpenGL
W OpenGL sześcienne mapowanie środowiskowe dostępne jest w rozszerzeniaach:
•
GL_ARB_texture_cube_map
•
GL_EXT_texture_cube_map
Przed skorzystaniem z mapowania należy najpierw go uaktywnić. Aktywacja
polega na wywołaniu funkcj glEnable() z parametrem GL_TEXTURE_CUBE_MAP_ARB.
UWAGA!!! Potrzebne funkcje dostępne są w bibliotece GLee znajdującej się pod adresem:
http://www.opengl.org/sdk/libs/GLee/
Laboratorium nr 9
2/4
3) Wybór obiektu tekstury otoczenia
Teksturowanie 3D jest bardzo podobne do teksturowania 2D, różni się przekazanymi
parametrami. Pierwszym krokiem jest wygenerowanie identyfikatora, z którym skojarzona zostanie
tekstura. Następnie, do identykikatora musi zostać przypisana tekstura:
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, cubeTex);
4) Ustawienie parametrów teksturowania
glTextParameteri(GLenum target, Glenum pname, Glint param);
Pierwszy argument funkcji zawsze przyjmuje wartość GL_TEXTURE_CUBE_MAP_ARB.
Wywołanie funkcji pozwala określić zachowanie tekstury 3D podczas rozciągania, zwężania oraz
podczas gdy jej rozmiar nie odpowiada rozmiarowi obiektu. Należy ustawić zachowanie dla każdej
współrzędnej tekstury:
GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TEXTURE_WRAP_R oraz dla filtrów powiększania i pomniejszania:
GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER
Środowisko tekstur pozwala na ustawienie parametrów mieszania składowych kolorów
fragmentów ze składowymi koloru tekseli. Parametr GL_REPLACE oznacza zastępowanie
składowych koloru przez składowe teksli. Dzięki temu tekstura na obiekcie pozostaje niezmieniona.
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_REPLACE);
4) Wczytanie tekstur
Tekstury mogą być zapisane w różnych typach plików i za pomocą wielu trybów koloru. W
sześciennym mapowaniu środowiskowym należy wczytać 6 tekstur. Wszytkie składają się na
teksturę 3D i są przypisane do wspólnego identyfikatora. Każda ściana musi być zdefiniowana
niezależnie. Za powiązanie odczytanego obrazu 2D z teksturą odpowiada funkcja:
void glTexImage2D (GLenum target, Lint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
Laboratorium nr 9
3/4
Należy ją wywołać dla każdej z 6 tekstur osobno. Parametr target określa ścianę, do której
przypisana będzie tekstura i przyjmuje następujące wartości:
•
GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB
•
GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB
•
GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB
•
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB
•
GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB
•
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB
Pozostałe parametry przyjmują takie same wartości, jak w przypadku tekstur 2D.
5) Wygenerowanie współrzędnych tekstury
Do prawidłowego odwzorowania tekstury na obiekt trzeba określić jak zostanie ona do
obiektu "przypięta". Jednak współrzędne nakładanych tekstur można wygenerować automatycznie.
Włączenie generowania tekstur wykonuje się za pomocą funkcji glEnable() przekazując jej stałą
określającą wsółrzedną tekstury:
GL_TEXTURE_GEN_S, GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_R
Następnie należy określić metodę za pomocą której będą generowane współrzędne tekstur.
Ustawienie parametrów generowania wykonuje się za pomocą metody:
glTexGeni(coord, pname, param);
gdzie:
•
coord – określa współrzędną tekstury (GL_S, GL_T, GL_R, GL_Q);
•
pname – nazwę parametru:
•
GL_TEXTURE_GEN_MODE – ustawienie trybu generowania tekstur;
•
GL_OBJECT_PLANE – parametry generowania współrzędnych dla
GL_OBJECT_LINEAR;
•
•
GL_EYE_PLANE – parametry generowania współrzędnych dla GL_EYE_LINEAR;
param – wartość parametru (dla GL_TEXTURE_GEN_MODE):
•
GL_OBJECT_LINEAR – współrzędne generowane liniowo w układzie współrzędnych
obiektu;
Laboratorium nr 9
•
4/4
GL_EYE_LINEAR – współrzędne generowane liniowo w układzie współrzędnych
obserwatora (ekranu);
•
GL_SPHERE_MAP – environment mapping
•
GL_REFLECTION_MAP_ARB – cube environment mapping
6) Wyrenderowanie obiektu 3D
Po zdefiniowaniu sześciennego mapowania środowiskowego, wystarczy narysować obiekt
3D, na który zostanie nałożona tekstura odwzorująca otaczające go środowisko.
Literatura:
[1] http://developer.nvidia.com/object/cube_map_ogl_tutorial.html

Podobne dokumenty