Texture. Tessitura si può considerare come il ves$to dei nostri ogge7 3D. Si tra;a di un array di pixel che vengono adagia?

Documenti analoghi
INFORMATICA GRAFICA. 19 Maggio Texture. Michele Antolini

INFORMATICA GRAFICA!

Computer Graphics. Memoria RAM nelle schede grafiche. Texture Mapping: paradigma di memoria. Concetto. Tessiture: Caso più comune.

Introduzione SOMMARIO

Corso di GraficaComputazionale

Il texture fetch (o: texture lookup) Operazione molto semplice in GLSL, es: e si memorizza le coord texture (s,t) per ogni vertice

Texture Mapping. Texture Mapping. Coordinate di texture. Esempi. Coordinate Texture

Corso di Tecniche Avanzate per la Grafica Texturing

Bump Mapping & Under-Water Effects. Dott. Stefano Tubini

Texture Mapping. Texture Mapping. Coordinate di texture. Esempi. Coordinate Texture

Corso di Grafica Computazionale

Corso di Grafica Computazionale Texturing

Corso di Grafica Computazionale

Corso di GraficaComputazionale Texturing

Texture Mapping Realtà Virtuale: il presente, il pass T a e t x o u, r i e l f M u a t p u pi ro ng

Corso di grafica 3D con C++ e OpenGL. Alessandro Bugatti ITIS B. Castelli

Grafica al calcolatore - Computer Graphics

WEBGL FOR DUMMIES [PARTE SETTE]: USO DELLE TEXTURE

DOUBLE BUFFERING. serve a nascondere la fase di drawing utilizzato soprattutto nelle animazioni INTRODUZIONE DRAWING EVENT MANAGEMENT VIEWING

Texture mapping. Davide Gadia Corso di Programmazione Grafica per il Tempo Reale Laurea Magistrale in Informatica a.a. 2014/2015

Corso di Tecniche Avanzate per la Grafica

Grafica al Calcolatore Tecniche di mappatura - 1. Introduzione

Grafica Computazionale. Texturing. Fabio Ganovelli a.a

LEZIONI DI LABORATORIO. Texture mapping (1)

Modelli per i materiali

BLENDER LEZIONI DI LABORATORIO

INFORMATICA GRAFICA. 12 Maggio Display lists, blending, fog. Michele Antolini

UNIVERSITÀ DEGLI STUDI DI PARMA

Grafica al calcolatore Computer Graphics

Computer Graphics. Immagine sul Raster Display. Grafica 3D: analogia con fotocamera. La matrice di Pixel è memorizzata nel FRAME BUFFER

Introduzione. Collision Detection. Collision Detection: Livello 1. Approssimare! Vincolare!

INFORMATICA GRAFICA!

OpenGL effects. Texture Mapping. La fase di texture mapping serve a conferire maggiore realismo agli oggetti della scena 3D.

Aggiornamento o modifica di un DEM con l'ausilio di QGIS

Modulo 1: Le I.C.T. UD 1.3a: La Codifica Digitale delle Immagini

La codifica delle immagini: Pixel. 1.3a: La Codifica Digitale delle Immagini. Bibliografia

Modellazione poligonale in Maya

Capitolo 6 Interazione luce-materia

Esercizio 1. Tavola ordinata in memoria centrale

1.3a: La Codifica Digitale delle Immagini

Le texture. Le texture. Informatica Grafica ][ Le texture. Le texture. Le texture. Le texture

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

BufferedImage: immagine gestita completamente in RAM Raster: gestione dei dati che formano l'immagine:

Montaggio e post-produzione

Primi programmi in C

Materiali avanzati. Informatica Grafica I. Riflessioni e trasparenze. Raytracing. Raytracing. Raytracing. Raytracing

Corso di Grafica Computazionale

Fogli Elettronici: MS Excel

Introduzione al linguaggio C Primi programmi

Effetti avanzati con le texture

Caveat. Sintesi di Immagini. Sintesi di Immagini. Rendering: Approccio Fisico

Caveat. Object e viewer, come tutte le metafore, sono entità non definite rigidamente. La luce fa parte del viewer? Il viewer è anch esso un object?

Corso di Grafica Computazionale

FIL I Puntatori. Michele Nappi biplab.unisa.it. 15/12/2014 M. Nappi/FIL 1

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Linguaggi di Programmazione I Lezione 10

Il TDA Map. Tabelle hash

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash

Esercitazione Google Maps

Codifica delle immagini

INFORMATICA GRAFICA. 28 Aprile Trasformazioni - Illuminazione. Michele Antolini

Livello di approfondimento della lezione. Texture mapping di solito spiegato in corsi di CG di base

Normal maps: come si ottengono (2/4)

Le strutture. UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA

Grafica al calcolatore Computer Graphics

Le texture. Le texture. Le texture. Le texture. Le texture

Materiali avanzati. Informatica Grafica per le arti. Raytracing. Raytracing. Raytracing. Raytracing. Raytracing

Strutture dati e loro organizzazione. Gabriella Trucco

OpenGL: Textures & Models collection di Federico NinjaCross Coletto

GY-LS300 File 3D-LUT per J-Log1 Manuale di istruzioni Per Premiere Pro CC. Versione 1.01

Computer Graphics. Realtà Virtuale: il presente, il passato, 3D il Graphics futuro

Il linguaggio C. Notate che...

Sempre piu difficile. Pallina che ruota sull anello. Doppio Anello. Rotolamento pallina 2. Rotolamento pallina 1. Aggiungiamo nell ordine

Il linguaggio C. Notate che...

Variabili e Funzioni. Informatica 1 / 19

PROVA SCRITTA 23 MARZO 2010

Computer Graphics. Digital representation of 3D objects. 3D Rendering. Scena 3D rendering image. Marco Tarini - univ insubria AA 2016/2017

Grafica computazionale

Introduzione alle stringhe e algoritmi collegati

Passare argomenti al programma

Elementi Finiti: Analisi Strutturale.

Formati e compressioni

Capitolo 10 - Strutture

Guida a Getrix: Indice Multimedia Planimetria

Autodesk Map parte II topologie

Metodologie Informatiche Applicate al Turismo

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Caratteri e stringhe

Il linguaggio C. Puntatori e dintorni

Dati due punti sul piano calcolare la loro distanza

HTML 3. Liste puntate ed ordinate Immagini

Transcript:

Textures

Texture Tessitura si può considerare come il ves$to dei nostri ogge7 3D Si tra;a di un array di pixel che vengono adagia? su una superficie Servono ad aumentare il de;aglio della scena

Texture Esempio: modellazione di un muro di ma-oni senza texture Il muro è una parete piana...ma è formata in realtà da vari ma;oni dispos? in una certa maniera Possiamo accostare una serie di parallelepipedi rossi secondo lo schema di un muro generico Il risultato sarebbe troppo regolare e pulito per sembrare (almeno un po ) reale In più...i ma;oni sono porosi, non sono parallelepipedi perfe7

Texture Esempio: modellazione di un muro con texture Usiamo una parete piana (un re;angolo o un parallelepipedo) Applichiamo (come fosse un poster) una texture presa da un muro reale L immagine verrà distorta corre;amente a seconda del punto di vista

Texture mapping Il caso del muro è molto semplice In generale una texture non viene posta su un re;angolo, ma su un poligono o una superficie generica E necessario specificare l algoritmo di texture mapping

Textures Fasi da seguire: 1. Creare un ogge;o da texturizzare 2. Specificare una texture per tale ogge;o (texture object) 3. Indicare come deve essere applicata la texture (per ogni pixel) 4. Abilitare il texture mapping 5. Disegnare la scena, fornendo coordinate geometriche e delle texture

Texture - Dimensioni Una texture non è necessariamente bidimensionale Esistono texture monodimensionali (linee) o tridimensionali (come le fe;e create da una TAC) Un elemento di una texture spesso si definisce textel (contrazione di texture pixel) Ogni textel può essere definito da uno, due, tre o qua;ro valori a seconda dell interpretazione della texture (ad esempio RGB, RGBA)

Texture Ci sono vari modi di applicare il colore di un textel con un frammento di superficie replace: il frammento di superficie viene rimpiazzato dai textel modulate: il colore del frammento di superficie viene usato per modulare/scalare il colore del textel blend: il colore del frammento è mescolato al textel

Texture - Abilitazione Per abilitare o disabilitare le textures si usano le consuete funzioni glenable() e gldisable() con argomento una tra le seguen? costan?: GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_CUBE_MAP

Texture e texture coordinate Prima di applicare una texture bisogna definire come viene incollata sull ogge;o Una texture bidimensionale ha una coppia di coordinate il cui range è (0.0, 1.0) in entrambe le direzioni le coordinate della texture sono (0.0,0.0), (0.0,1.0), (1.0,0.0), (1.0,1.0) per i qua;ro ver?ci di un muro (ad esempio) Una texture può essere ripetuta, in tal caso: le coordinate della texture non sono sono più le stesse per i ver?ci esterni del muro, ma sono scalate in base al numero di ripe?zioni necessarie Bisogna specificare il comportamento della texture quando le sue coordinate escono dal range (0.0, 1.0) Le texture devono essere affiancabili (vincolo necessario solo per finalità este?che)

Texture Wrapping: CLAMP vs REPEAT

Texture Filtering Durante il processo di texture mapping, avviene il texture lookup, ovvero la ricerca di quale textel associare ad un pixel. Non sempre c è una corrispondenza esa;a. Possono essere genera? artefa7 sia quando un textel deve essere spalmato su più pixel (magnifica?on) e sia quando più textel devono essere associa? ad un pixel (minifyca?on)

Texture - MipMap MipMap sta per multum in parvo (mol? in un piccolo spazio) Perme;e di memorizzare diverse versioni di una texture, a seconda del livello di de7aglio che si vuole o;enere (es. a seconda della risoluzione o della distanza) OpenGL sceglierà automa?camente la texture da u?lizzare

Tipologie di Texture Filtering Nearest- neighbor interpola?on Nearest- neighbor with mipmapping Bilinear Filtering Trilinear Filtering

Esempio di trilinear Filtering

Texture - Esempio In questo esempio viene creata una scacchiera, generando un array 2D tramite codice" /*!Create checkerboard texture!*/" #define!checkimagewidth 64" #define!checkimageheight 64" static GLubyte checkimage[checkimageheight][checkimagewidth][4];" void makecheckimage(void)" {" int i, j, c;" for (i = 0; i < checkimageheight; i++) {" for (j = 0; j < checkimagewidth; j++) {" c = ((((i&0x8)==0)^((j&0x8))==0))*255;" checkimage[i][j][0] = (GLubyte) c;" checkimage[i][j][1] = (GLubyte) c;" checkimage[i][j][2] = (GLubyte) c;" checkimage[i][j][3] = (GLubyte) 255;" }" }" }

Texture - Esempio Allʼinterno della init() si definiscono i parametri della texture, che viene alla fine caricata nella memoria della scheda video" Gluint texname;" void init(void) {" glclearcolor (0.0, 0.0, 0.0, 0.0);" glshademodel(gl_flat);" glenable(gl_depth_test);" makecheckimage();" glgentextures(1, &texname);! glbindtexture(gl_texture_2d, texname);! glpixelstorei(gl_unpack_alignment, 1);" 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_NEAREST);" gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_NEAREST);" glteximage2d(gl_texture_2d, 0, 4, checkimagewidth, checkimageheight," 0, GL_RGBA, GL_UNSIGNED_BYTE, checkimage);" }

Texture - Esempio glgentextures( 1, &texname ); richiede di creare un ogge;o texture glbindtexture( GL_TEXTURE_2D, texname); Imposta la texture a7va, definita come bidimensionale glpixelstorei( GL_UNPACK_ALIGNMENT, 1 ); Definisce la dimensione dei da? dell array. In questo caso si tra;a di un array di byte. Valori possibili: 1,4,8

Texture - Esempio gltexparameteri() GL_TEXTURE_2D: si riferisce alla dimensione della texture GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: impostano il comportamento di ripe?zione della texture GL_CLAMP (no ripe?zione), GL_REPEAT (ripe?zione) GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER: imposta come la texture deve essere scalata (MAGNIFIED o MINIMIZED) se l area non corrisponde a quella della des?nazione GL_NEAREST (punto più vicino), GL_LINEAR (interpolazione lineare) glteximage2d() Copia i da? della texture nella memoria della scheda video

Texture - Esempio glteximage2d() Copia i da? della texture nella memoria della scheda video! glteximage2d("!! GL_TEXTURE_2D,!//target"!! 0,!!//level of detail 0-n"!! 4,!!//number of color components"!! checkimagewidth, //width"!! checkimageheight, //height" 0,!!//border width 0 or 1"!! GL_RGBA,!!//format of pixel data"!! GL_UNSIGNED_BYTE,!//type of pixel data"!! checkimage!//pixel data"! );" http://www.opengl.org/sdk/docs/man/xhtml/glteximage2d.xml"

Display()" Texture - Esempio void display(void)" {" glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT);" glenable(gl_texture_2d);" glbindtexture(gl_texture_2d, texture);! " gltexenvf(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_DECAL);" glbegin(gl_quads);" gltexcoord2f(0.0, 0.0); glvertex3f(-2.0, -1.0, 0.0);" gltexcoord2f(0.0, 3.0); glvertex3f(-2.0, 1.0, 0.0);" gltexcoord2f(3.0, 3.0); glvertex3f(0.0, 1.0, 0.0);" gltexcoord2f(3.0, 0.0); glvertex3f(0.0, -1.0, 0.0);" gltexcoord2f(0.0, 0.0); glvertex3f(1.0, -1.0, 0.0);" gltexcoord2f(0.0, 3.0); glvertex3f(1.0, 1.0, 0.0);" gltexcoord2f(3.0, 3.0); glvertex3f(2.41421, 1.0, -1.41421);" gltexcoord2f(3.0, 0.0); glvertex3f(2.41421, -1.0, -1.41421);" glend();" glflush();" gldisable(gl_texture_2d);" }

Texture - Esempio GL_TEXTURE_ENV:Imposta la modalità con cui la texture viene messa sulla superficie Modalità possibili: GL_ADD, GL_MODULATE, GL_DECAL, GL_BLEND, GL_REPLACE, GL_COMBINE Texture Func?on GL_REPLACE Arg0 GL_MODULATE Arg0 Arg1 GL_ADD Arg0 + Arg1 GL_ADD_SIGNED Arg0 + Arg1-0.5 GL_INTERPOLATE Arg0 Arg2 + Arg1 1 - Arg2 GL_SUBTRACT Arg0 - Arg1

Texture - Esempio glbindtexture( GL_TEXTURE_2D, texname ) Imposta la texture a7va gltexcoord*() Imposta le coordinate della texture per il ver?ce successivo Valori > 1.0 indicano una scalatura e una eventuale ripe?zione a seconda del valore dei parametri GL_TEXTURE_WRAP_S oppure T

keyboard callback" Texture - Esempio void keyboard (unsigned char key, int x, int y)" {" switch (key) {" case 's':" gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_CLAMP);" glutpostredisplay();" break;" case 'S':" gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT);" glutpostredisplay();" break;" case 't':" gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_CLAMP);" glutpostredisplay();" break;" case 'T':" gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_REPEAT);" glutpostredisplay();" break;" default:" break;" }" }

Texture - Subimage E possibile aggiungere altre texture sopra quelle già definite gltexsubimage2d( GL_TEXTURE_2D, //?po di texture 0, //livello di de;aglio 12, //offset x 44, //offset y subimagewidth, subimageheight, GL_RGBA, GL_UNSIGNED_BYTE, //?po di da? subimage ); //array textel //formato textel

Texture Caricamento file immagine OpenGL non ges?sce forma? di file compressi (JPG, GIF, TGA, PNG...) La le;ura (e la conversione in array) vanno effe;uate con estensioni di OpenGL o librerie esterne Esistono le funzioni glcompressedteximage*d ma l implementazione dipende da come è implementata la libreria OpenGL locale

Texture Caricamento file immagine Un possibile soluzione è Aprire/creare un immagine con GIMP Salvarla come C source Non selezionare Use Glib types A7vare/disa7vare l alpha channel a seconda del caso, ma usare GL_RGB o GL_RGBA di conseguenza! Rinominare il file come.h ed includerlo nel proge;o Viene creata una stru;ura che con?ene dimensione e da? dell immagine Inserire i valori corre7 nella glteximage2 gimp_image.width, gimp_image.height gimp_image.pixel_data

Texture Caricamento file immagine In alterna?va, u?lizzare librerie come DevIL h;p://openil.sourceforge.net/ SOIL

Environment Mapping Il realismo può essere migliorato simulando effe7 di luce risultan? da inter- riflessioni tra ogge7 grazie alle texture. Il termine Environment Mapping descrive una tecnica di texturizzazione usata per simulare le influenze dell ambiente circostante su un ogge;o. Le tecniche di environment mapping, come tu;e le tecniche di texturing, cambiano l apparenza di un ogge;o applicando una texture sulla superficie. Una texture per l environment map prende in considerazione le viste dell ambiente che circonda l ogge;o da texturizzare. Se l ogge;o ha una superficie ad alta specularità, la texture mostrerà gli ogge7 circostan? riflessi dalla superficie. Gli ogge7 a bassa specularità verranno testurizza? con una immagine che approssima la radianza dell ambiente

Texture Sphere mapping Lo sphere mapping mappare una superficie sferica su un ogge;o. OpenGL fornisce delle subrou?ne che consentono di generare in automa?co le texture coordinate. " " Esempio:" gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);!!!// Set Up Sphere Mapping" gltexgeni(gl_t, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);!!!// Set Up Sphere Mapping"

Texture Cube mapping Simile allo sphere mapping, ma perme;e di impostare sei texture differen? (una per ogni faccia di un cubo) h;p://www.f- lohmueller.de/pov_tut/tex/tex_790i.htm

Texture Cube mapping Chiamate successive alla glteximage2d, con primo argomento: GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT Abilitare/Disabilitare cube mapping: glenable(gl_texture_cube_map_ext); gldisable(gl_texture_cube_map_ext); h;p://www.f- lohmueller.de/pov_tut/tex/tex_790i.htm

Cube mapping Questo esempio imposta in modo sinte?co le sei texture per il cube mapping (ordine delle texture nell array: x+, x-, y+, y-, z+, z- ) GLubyte face[6][64][64][3]; for (i=0; i<6; i++) { glteximage2d(gl_texture_cube_map_positive_x_ext + i, 0, //level GL_RGB8, //internal format 64, //width 64, //height 0, //border GL_RGB, //format GL_UNSIGNED_BYTE, //type &face[i][0][0][0]); // pixel data } h;p://www.nvidia.com/object/cube_map_ogl_tutorial.html