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