Texture Mappin La fase di texture mappin serve a conferire maiore realismo ali oetti della scena 3D. Richiede molte risorse di calcolo specie se il modello eometrico è particolarmente complesso. ampi di applicazione: Animazione; Video-ame; Real-time renderin; Renderin fotorealistico texture
Texture mappin Bisona creare una funzione di mappatura tra la eometria e le dimensioni dell immaine usata come texture.
Texture mappin Le texture sono immaini (più o meno definite) che venono attaccate alla eometria texture
Texture mappin Qual è la relazione di mappatura tra un oetto 2D (un piano) è una eometria complessa? Bisona decidere una modalità di mappatura.
Mappatura planare onsidera l immaine come un piano bidimensionale che viene adattato alla eometria che incontra.
Mappatura ilindrica Le coordinate (x,y,z) sono trasformate in coordinate cilindriche. x = rcosθ r = x + y y 2 2 1 = rsinθ θ = tan z = z z = z y x
Mappatura sferica x= rcosθsinφ r = x + y + z y z rsinθsinφ θ tan 2 2 2 1 = = rcosθ cos y x z r 1 = = φ
Environment mappin La texture non serve solo a renderizare con maiore realismo una eometria, ma a miliorare anche li effetti indotti dall ambiente circostante (environment mappin).
ube mappin
ube mappin: esempio
ube mappin esempio:
Bump Mappin E quella tecnica che manipola una texture tale che una volta mappata sulla eometria le conferisce anche un aspetto 3D più realistico.
OpenGL: texture OpenGL è in rado di manipolare le texture sottoforma di informazioni che possono essere 1D, 2D, 3D. Tipicamente una texture è 2D perché le informazioni dei pixel sono distribuite su un piano. t Texture 2D La direzione u è costante t s Texture 1D
Openl: texture Una texture 1D è definita in termini di una dimensione. 1D ltexture1d( ) lenable(gl_texture_1d); Una texture 2D invece mantiene entrambe le dimensioni. ltexture2d( ) lenable(gl_texture_2d); Texture 3D invece sono volumi eneralmente acquisiti come TA, MRI ecc
OpenGL: texture La funzione che definisce una texture 2D: lteximae2d(glenum taret, GLint level, GLint components, GLsizei w, GLsizei h, GLint border, GLenum format, GLenum type, const GLvoid *pixels); taret:gl_texture_2d (per 1D avremo GL_TEXTURE_1D) level: indica il livello di dettalio (level-of-detail LOD) di plottin dell immaine tipicamente si mette a 0; w,h: dimensioni dell immaini (devono essere potenze di 2) border: 0 oppure 1, spessore del bordo; format: rappresentazione dei colori (GL_RGB, GL_OLOR_INDEX, GL_RED, GL_GREEN, GL_BLU, ); type: tipo di dato contenuto (GL_UNIGNED_BYTE, ) pixels: puntatore alla matrice che contiene i pixel.
OpenGL: texture Una volta memorizzata l immaine in OpenGL, bisona definire quelli che sono i texturin modes: definisce la modalità di renderin delle texture rispetto ad altre caratteristiche della scena (luci, shadin, ) ltexenvi{fv}(gl_texture_env, GLenum pname, const GLfloat *params ); pname: GL_MODULATE (modula l illuminazione e i colori con le informazioni dell immaine; GL_DEAL(considera solo la texture interferenze ); GL_BLEND(fonde tra loro 2 texture insieme). senza altre
OpenGL: texture i filtri ltexparametr{i,f}(glenum taret, GLenum pname, GLfloat param); taret: se si tratta di texture 1D o 2D (GL_TEXTURE_1D ); pname: tipo di filtro da applicare; param: un valore numerico relativo all applicazione del filtro (GL_NEARET, GL_LINEAR, ). E necessaria la definizione di filtraio perché l immaine che è un dominio discreto, viene mappata su un dominio continuo (s,t)=[0,1]. Di conseuenza è necessario realizzare una interpolazione dei pixel dell immaine per individuare la relativa posizione in coordinate [0,1].
I filtri: esempio
I filtri: esempio
I filtri: esempio Faccio la fusione con un altra texture. In questo caso con il colore del poliono stesso.
oordinate texture Una volta definite le caratteristiche di texturin bisona aanciare l immaine alla eometria: t Bisona associare una porzione di texture al poliono pazio 2D s
oordinate texture Le coordinate sono espresse in variabili s e t dove s e la larhezza e t l altezza. void ltexoord2d( GLdouble s, GLdouble t ); Permette di specificare una posizione in coordinate 2D all interno della texture e di associarla alla lvertex che seue: ltexoord2f(0.0f, 0.0f); lvertex3f(-1.0f, -1.0f, 1.0f); ltexoord2f(1.0f, 0.0f); lvertex3f( 1.0f, -1.0f, 1.0f); ltexoord2f(1.0f, 1.0f); lvertex3f( 1.0f, 1.0f, 1.0f); ltexoord2f(0.0f, 1.0f); lvertex3f(-1.0f, 1.0f, 1.0f);
oordinate texture - esempio
oordinate texture - esempio Risultato texturin t s pazio 2D texture
oordinate texture - esempio
Esempio: texturin di una teapot Il proramma realizza il renderin della primitiva eometrica teapot che è stata renderizzata con una texture pot.bmp.
funzione di renderin: Essendo caricata una sola immaine ed una sola eometria il bindin tra eometria e texture è automatico.
Librerie per leere immaini http://openil.sourcefore.net/ Le liberie DevIL sono adatte ad essere interate all interno di un proramma OpenGL. E possibile utilizzarle al posto di chiamate win32 (vedere msdn). Esercitazione: ostruire un ambiente di visualizzazione 3D in MF che visualizzi una eometria e permetta di attaccare una texture scelta dall utente tramite un opportuna Filedialo.
Texture multiple In una scena complessa esistono più texture associate ad una stessa eometria o a eometrie distinte. E necessario quindi elaborare le texture come oetti distinti in opengl.
Texture multiple Texture Objects di opengl sono miliori dal punto di vista delle prestazioni, della dichiarazione di oni sinola texture. Venono caricate e mantenute in memoria da OpenGL: lgentextures; lbindtexture; ldeletetextures
lgentexture( ) void lgentextures( GLsizei n, GLuint* textures ); Alloca la memoria necessaria per allocare n texture individuate dal vettore textures. Esempio di allocazione di 5 texture: GLuint texture_objects[5]; lgentexture(5,texture_objects);
lbindtexture( ) Una volta allocata la memoria OpenGL per le texture è necessario specificare per onuna che tipo di texture sono: void lbindtexture( GLenum taret, GLuint texture ); Esempio: lbindtexture(gl_texture_2d, texture_object[3]);
ldeletetextures( ) Una volta che la texture non è più utilizzata è possibile cancellarla con: void ldeletetextures( GLsizei n, const GLuint * textures ); he elimina l n-esima texture individuata da textures
Esempio arico la texture per un terreno pecifico come le coordinate texture sono mappate sul terreno
Generazione delle coordinate texture Le coordinate texture devono essere specificate dall utente.e permettono di mappare l immaine sulla eometria. ltexoord2f( ) OpenGL permette di enerare automaticamente le texture!
ltexgen( ) void ltexgen{fiv}( GLenum coord, GLenum pname, GLfloat param ); La funzione che enera automaticamente coordinate texture: coord := GL_, GL_T, GL_R, GL_Q. pname := può essere solo GL_TEXTURE_GEN_MODE param := GL_OBJET_LINEAR, GL_EYE_LINEAR, or GL_PHERE_MAP (oppure vettore che definisce il rane nel dominio dello spazio texture).
Esempio Renderizza la eometria utilizzando la ltexgen per enerare coordinate texture.
eminario: Approfondire le tecniche di texture mappin di OpenGL (ad esempio: mipmappin), effettuare una ricerca riuardante la mappatura (mappin) di eometrie complesse in spazi 2D per realizzare la minore distorsione di un eventuale texture.