Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFrediano Catania Modificato 11 anni fa
1
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione 12: realismo a buon prezzo: il texture Mapping
2
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 2/40 Memoria RAM nelle schede grafiche Frammenti & attributi interpolati Vertici & loro attributi Screen buffer (RGBA) Screen buffer 2 (RGBA) Depth buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice DISPLAY LISTs Texture RAM computazioni per frammento
3
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 3/40 Texture Mapping Nelle operazioni per frammento si può accedere ad una RAM apposita –la Texture RAM –strutturata in un insieme di Textures ("tessiture") Ogni tessitura è un array 1D, 2D o 3D di Texels (campioni di tessitura) dello stesso tipo
4
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 4/40 Texels Tipici esempi di texels: –ogni texel un colore (componenti: R-G-B, o R-G-B-A) la tessitura è una "color-map" –ogni texel una componente alpha la tessitura è una "alpha-map" –ogni texel una normale (componenti: X-Y-Z) la tessitura è una "normal-map" o "bump-map" –ogni texel contiene un valore di specularità la tessitura è una "shininess-map" –...
5
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 5/40 Tipica applicazione: rimappare immagini sulla geometria geometria 3D (mesh di quadrilateri) + RGB texture 2D (color-map) =
6
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 6/40 Altro esempio
7
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 7/40 Altro esempio +=
8
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 8/40 Texture Mapping: Storia 1974 introdotto da Ed Catmull –nella sua Phd Thesis Solo nel 1992 (!) si ha text. mapping hardware –Silicon Graphics RealityEngine Dal 92 a oggi: aumento rapidissimo della diffusione –strada intrapresa soprattutto da low end graphic boards Oggi: una delle piu fondamentali primitive di rendering –il re indiscusso delle tecniche image based Ed Catmull (MEGA-MEGA- GURU)
9
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 9/40 Notazione Texture 2D u v texel Texture Space (o "spazio parametrico" o "spazio u-v") Una Texutre e' definita nella regione [0,1] x [0,1] dello "spazio parametrico" 512 texels 1024 texels 1.0
10
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 10/40 Texture Mapping Ad vertice (di ogni triangolo) assegno le sue coordinate u,v nello spazio tessitura Screen Space x 0,y 0 x 2,y 2 x 1,y 1 u 0,v 0 u 1,v 1 u 2,v 2 posizione del 1mo vertice attributi del 1mo vertice u 0,v 0 u 1,v 1 u 2,v 2
11
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 11/40 Texture Mapping Così in pratica definisco un mapping fra il triangolo e un triangolo di tessitura Texture Space Screen Space
12
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 12/40 Texture Mapping Ogni vertice (di ogni triangolo) ha le sue coordinate u,v nello spazio tessitura Texture Space Screen Space texture look-up
13
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 13/40 Texture Mapping Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture coordinate texture interpolate compreso: coordinate texture (per vertice!) texture look-up interpolo coordinate texture
14
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 14/40 Problema: interpolazione lineare coordinate texture Non vale per la proiezione prospettica! –era solo una approssimazione –andava bene quando interpolavamo colori, normali –non va bene quando interpoliamo coordinate texture... V1V1 V2V2 V3V3 p f(p) f( v 1 ) f( v 2 ) f( v 3 ) proiezione f p ha coord. baricentriche a,b,c nel triangolo v 1 v 2 v 3 f(p) ha coord. baricentriche a,b,c nel triangolo f(v 1 ) f(v 2 ) f(v 3 )
15
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 15/40 Problema: interpolazione lineare coordinate texture Esempio: u v 1 1 u,v= (1,0) u 1,v 1 = (1,1) u 1,v 1 = (0,1) u 1,v 1 = (0,0)
16
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 16/40 Problema: interpolazione lineare coordinate texture Esempio:
17
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 17/40 Soluzione: Correzione Prospettica p ha coordinate baricentriche c 0 c 1 c 2 V0V0 V2V2 V1V1 A 0,B 0... A 1,B 1... A 2,B 2... p p = c 0 v 0 + c 1 v 1 + c 2 v 2 attributi di p: (senza considerare la "correzione prospettica") A p = c 0 A 0 + c 1 A 1 + c 2 A 2 B p = c 0 B 0 + c 1 B 1 + c 2 B 2 = ( x 0, y 0, z 0, w 0 )
18
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 18/40 Soluzione: Correzione Prospettica p ha coordinate baricentriche c 0 c 1 c 2 V0V0 V2V2 V1V1 A 0,B 0... A 1,B 1... A 2,B 2... p p = c 0 v 0 + c 1 v 1 + c 2 v 2 attributi di p: (senza considerare la "correzione prospettica") A p = c 0 A 0 + c 1 A 1 + c 2 A 2 A0A0 w0w0 A1A1 w1w1 A2A2 w2w2 Ap =Ap = 1 w0w0 1 w1w1 1 w2w2 = ( x 0, y 0, z 0, w 0 )
19
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 19/40 Soluzione: Correzione Prospettica Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice computazioni per frammento attributo originale A applico transofrm. poi calcolo: A' = A / w e w' = 1 / w c 0 + c 1 + c 2 A0A0 w0w0 A1A1 w1w1 A2A2 w2w2 Ap =Ap = 1 w0w0 1 w1w1 1 w2w2 interpolo A' e w' attributo finale del frammento: A' / w' c 0 + c 1 + c 2
20
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 20/40 Correzione Prospettica SenzaCon
21
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 21/40 Correzione Prospettica Texture mapping con correzione prospettica –anche conosciuto come: texture mapping perfetto metodo dei 3 vettori magici (arcaico) metodo dei 9 numeri magici (arcaico)
22
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 22/40 Nota: la tessitura va caricata Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice computazioni per frammento Texture RAM LOADLOAD
23
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 23/40 Nota: la tessitura va caricata 1.Da disco a memoria RAM main (sulla scheda madre) 2.Da memoria RAM main a Texture RAM (on board dell'HW grafico) Entrambe operazioni piuttosto lente. Per es, impossibili da fare una volta per frame!
24
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 24/40 In OpenGL Ad esempio: glEnable(GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, ID); glTexImage2D ( GL_TEXTURE_2D, 0, // mipmapping GL_RGB, // formato interno imageWidth, imageHeight, 0, // bordo GL_RGB, // formato nella RAM GL_UNSIGNED_BYTE, imageData);
25
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 25/40 Come si assegnano le coordinate texture ai vertici? Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture coordinate texture interpolate compreso: coordinate texture (per vertice!) texture look-up compreso: coordinate texture (per vertice!)
26
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 26/40 Come si assegnano le coordinate texture ai vertici? Due classo di soluzioni: –Assegnarle le coordinate textures al volo durante il rendering… –Precomputarle (e salvarle insieme alla mesh) Dipende dallapplicazione!
27
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 27/40 Problema difficile: u-v mapping Assegnare una coppia di coordinate texutres ad ogni vertice della mesh –In preprocessing u v u v
28
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 28/40 Problema difficile: u-v mapping fatto a mano, o automatizzato
29
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 29/40 In OpenGL Come ogni altro attributo TexCoord2d( u,v )
30
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 30/40 Come si assegnano le coordinate texture ai vertici? Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture coordinate texture interpolate texture look-up coordinate texture (eventualmente trasformate) compreso: coordinate texture
31
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 31/40 Come si assegnano le coordinate texture ai vertici? Due classo di soluzioni: –Assegnarle le coordinate textures al volo durante il rendering… –Precomputarle (e salvarle insieme alla mesh)
32
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 32/40 Come si assegnano le coordinate texture ai vertici? Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture coordinate texture interpolate texture look-up coordinate texture produco coordinate texture a partire dalla posizione
33
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 33/40 Create automaticamente Concetto: da (x,y,z) a (u,v) - Linearmente In coordinate oggetto o vista –(prima o dopo la trasformazione) Esempi:
34
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 34/40 Create automaticamente Anche 1D 1D texture!
35
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 35/40 Come si assegnano le coordinate texture ai vertici? Due classo di soluzioni: –Assegnarle le coordinate textures al volo durante il rendering… –Precomputarle (e salvarle insieme alla mesh)
36
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 36/40 Environment mapping: sferico Environment map: una tessitura che memorizza il colore dellambiente riflesso da ogni normale della semisfera. Come coordinata tessitura, basta usare la normale trasformata!
37
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 37/40 Environment mapping: sferico simula oggetto a specchio che riflette uno sfondo lontano simula un materiale complesso (condizioni di luce fisse)
38
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 38/40 Environment mapping: cubico frontrightback below above left
39
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 39/40 Environment mapping: cubico Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture 3D coordinate texture 3D interpolate proietto sul cubo, accedo alla faccia corrispondente calcolo coordinate texture 3D [-1,+1] x [-1,+1] x [-1,+1] come raggio di vista riflesso dalla normale
40
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 40/40 Environment mapping: cubico frontrightback below above left
41
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 41/40 Environment mapping: cubico e sferico Sferico: –un texel per ogni direzione nella semisfera proiettata su un cerchio –come coordinata texture uso la normale –per forza effetto "headlight": ruoto oggetto mentre punto vista rimane fermo Cubico –un texel per ogni direzione nella sfera proiet. sulla sup di un cubo –come coordinata texture uso la direzione di vista rifelssa dalla normale –punto di vista può ruotare intorno ad oggetto fermo
42
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 42/40 Creazione Automatica Coordinate Texture glEnable(GL_TEXTURE_GEN_S); 1- abilitarla: 2- scegliere la modalita': glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, mode ) S, T, R, Q mode = GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP computa le coord texture dalle pos nel sist di rif oggetto (prima della trasformazione) computa le coord texture dalle pos nel sist di rif camera (dopo la MODEL-VIEW) computa come coord texture il raggio di vista rifelsso – usa la normale (dopo la MODEL-VIEW)
43
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 43/40 Creazione Automatica Coordinate Texture glTexGenfv(GL_S, GL_EYE_PLANE, v); 3- scegliere il piano S, T, R, Q EYE OBJECT o vettore di 4 elementi coordinata texture prodotta = v T pos_vertice (e' distanza da un piano!)
44
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 44/40 Texture Mapping Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture coordinate texture interpolate compreso: coordinate texture (per vertice!) texture look-up
45
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 45/40 u Texture Look-up: fuori dai bordi: modo "clamp" if (u 1) u1; if (v 1) v1; 1 1 v
46
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 46/40 Texture Look-up: fuori dai bordi: modo "repeat" u v 1 1 u u – [ u ] v v – [ v ]
47
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 47/40 Tessiture ripetute Tipico utilizzo: Molto efficiente in spazio! Nota: deve essere TILABLE
48
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 48/40 In OpenGL glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); o nota: setto per u e v separatemente sono parametri della tessitura. Ogni tessitura caricata in memoria ha i propri parametri.
49
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 49/40 Texture Mapping Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Texture RAM computazioni per frammento interpolo coordinate texture coordinate texture interpolate compreso: coordinate texture (per vertice!) texture look-up
50
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 50/40 Texture Look-up Un frammento ha coordinate non intere (in texels) Texture Space Screen Space texture look-up
51
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 51/40 pixel Texture Look-up Texture SpaceScreen Space pixel texel un pixel = meno di un texel un pixel = più di un texel minification magnification
52
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 52/40 0.51.5 2.5 3.54.55.56.5 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 Caso Magnification u v Soluzione 1: prendo il texel in cui sono (equivale a prendere il texel più vicino) equivale ad arrotondare alle coordinate texel intere "Nearest Filtering" 7.5
53
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 53/40 Caso Magnification texture 128x128 Nearest Filtering: risutlato visivo "si vedono i texel !"
54
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 54/40 0.51.5 2.5 3.54.55.56.5 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 Caso Magnification u v Soluzione 2: Medio il valore dei quattro texel più vicini Interpolazione Bilineare 7.5 Ripasso: interpolazione lineare (1D) interpolazione bi-lineare (2D) Formule...
55
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 55/40 Caso Magnification texture 128x128 Bilinear Interpolation: risutlato visivo
56
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 56/40 Caso Magnification Modo Nearest: –si vedono i texel –va bene se i bordi fra i texel sono utili –più veloce Modo Interpolazione Bilineare –di solito qualità migliore –può essere più lento –rischia di avere un effetto "sfuocato"
57
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 57/40 Caso Minification Nearest Filtering Bilinear interpolation non risolve il problema
58
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 58/40 Caso Minification: MIP-mapping MIP-map level 0 MIP-map level 1 MIP-map level 2 MIP-map level 3 MIP-map level 4 (un solo texel) MIP-mapping: "Multum In Parvo"
59
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 59/40 Mipmap Math Definiamo un fattore di scala, =texels/pixel – è il massimo fra x e y –può variare sullo stesso triangolo –può essere derivato dalle matrici di trasformazione –calcolato nei vertici, interpolato nei frammenti il livello di mipmap da utilizzare è: log 2 –livello 0 = massima risoluzione –se livello<0 cosa significa? –nota: il livello non è necess. un numero intero
60
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 60/40 Caso Minification: MIP-mapping Bilinear interpolation non risolve il problema MIP-mapping
61
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 61/40 Caso Minification: MIP-mapping 0 1 2 3 4 5 altro esempio
62
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 62/40 In OpenGL glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); o decidere che tipo di magnificazione usare:
63
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 63/40 In OpenGL glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, modo ); modo = GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR o decidere che tipo di minifacazione usare: interpolazione trilineare
64
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 64/40 In OpenGL Caricare sulla scheda i vari livelli di mipmapping. –uno per uno: glTexImage2D ( GL_TEXTURE_2D, i, // MIP-map level GL_RGB, // formato interno imageWidth, imageHeight, 0, // bordo GL_RGB, // formato nella RAM GL_UNSIGNED_BYTE, imageData);
65
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I 2 0 0 4 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 65/40 In OpenGL Caricare sulla scheda i vari livelli di mipmapping. –tutti insieme (con la liberira glu): glTexImage2D ( GL_TEXTURE_2D, 0, // MIP-map level GL_RGB, // formato interno imageWidth, imageHeight, 0, // bordo GL_RGB, // formato nella RAM GL_UNSIGNED_BYTE, imageData); gluBuild2DMipmaps (
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.