Shading e smoothing - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Shading e smoothing

Description:

Title: Introduzione al C-Cpp Author: babodonte Last modified by: Daniele Marini Created Date: 2/15/2005 3:47:52 PM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:62
Avg rating:3.0/5.0
Slides: 36
Provided by: babodonte
Category:

less

Transcript and Presenter's Notes

Title: Shading e smoothing


1
Shading e smoothing
Corso Di Programmazione Grafica aa2006/2007
  • Daniele Marini

2
Scopo
  • Raffigurare forme con superfici curve
    rappresentate come poliedri
  • Il modello di illuminazione determina il valore
    di colore in punti significataivi (vertici per
    metodo di Gourad, punti intermedi per metodo di
    Phong)
  • Si tratta di un problema di approssimazione o
    interpolazione
  • Occorre stimare la curvatura in ogni punto, e il
    gradiente della curva approssimante

3
Calcoli sui vettori
  • Vettore normale
  • equazione del piano axbyczd0 si può anche
    scrivere come luogo
  • e p è un qualunque punto nel piano il vettore n
    è dato da

4
In generale possiamo partire da tre punti non
allineati p0, p1, p2 con i quali determiniamo il
piano (superfici approssimate con poliedri
triangolarizzati). Le differenze p2 - p0 e p1 -
p0 sono coplanari e il loro prodotto dà la
normale n (p2 - p0) x (p1 - p0) Lordine è
rilevante
5
Il calcolo del gradiente di superfici curve
dipende da come la superficie è rappresentata
(forma parametrica o forma implicita). Es. sfera
- equazione implicita f(x,y,z) x2 y2 z2
-10 In forma vettoriale f(p) p.p -1 0 Il
vettore gradiente è dato da
6
Se la sfera è rappresentata in forma parametrica
il metodo di calcolo cambia
La normale si può ricavare dal piano tangente in
p
7
Individuano due vettori tangenti il cui prodotto
vettore determina la normale - poiché ci
interessa solo la direzione si può dividere per
cos(u) ottenendo un vettore unitario
8
Quando calcolare le normali?
  • Larchitettura a pipe line dei sistemi di
    rendering prevede che la normale di una faccia
    sia nota a priori (viene elaborato un vertice per
    volta e non tutta linformazione è disponibile)
  • in generale è compito del programma applicativo
    calcolare la normale. OpenGL permette di
    associare a ogni vertice una normale (che
    dobbiamo calcolare noi nellapplicativo)
  • glNormal3f(nx,ny,nz)
  • glNormal3fv(pointer_to_normal)

9
Shading di poligoni(flat shading)
  • N, V ed L variano su ogni poligono
  • se si assume osservatore distante e sorgente di
    luce distante (in OGL si setta a falso il flag
    near_viewer) V e L sono costanti
  • anche N è quindi costante sullintero poligono
  • Il calcolo di shading viene fatto per lintero
    poligono una sola volta

10
OGL e flat shading
glShadeModel(GL_FLAT)
La normale che OGL utilizza è quella associata al
primo vertice del poligono Per i triangle strip
OGL usa la normale del terzo vertice per il primo
triangolo, la normale del quarto per il secondo e
così via Per altre primitive valgono regole
simili (vedi manuali)
11
Triangle strip
12
Flat vs Smooth
Smooth shading
Flat shading
13
Interpolazione
  • essenziale nei problemi di animazione
  • date due posizioni chiave relative al
    fotogramma al tempo t 0 e al tempo t 1
    determinare le posizioni intermedie relative a
    ogni singolo fotogramma
  • occorre garantire regolarità nel movimento
  • le posizioni possono riguardare oggetti,
    fotocamera o altro

14
Interpolazione Lineare
  • Definisce un percorso rettilineo tra due punti in
    uno spazio n-dimensionale
  • Una dimensione di interpolazione

15
Interpolazione Lineare
t1
  • Data due punti P1 e P2 definisco una funzione nel
    parametro t?0,1
  • P(t) P0 t (P1 P0) (1-t)P0 t P1

P2
P(t)
t0
P1
16
Interpolazione Lineare
  • Nel piano, dati due punti (x1,y1) e (x2, y2) si
    vuole calcolare (xP, yP) conoscendo il valore di
    xP

y2
yP ?
y1
dy
y2-y1
x1
x2
xP
17
Interpolazione Lineare
Si possono usare tecniche incrementali per
accelerare il calcolo
18
Interpolazione Bi-lineare
  • Considero due dimensioni di interpolazione
  • Utilizzato per esempio allinterno di griglie
    regolari (es. texture)
  • Peso i punti condelle aree

P1
P2
A3
A4
P
A1
A2
P3
P4
19
Interpolazione quadratica e cubica
  • Linterpolazione lineare calcola i valori
    intermedi utilizzando lequazione della retta
    (grado 1) passante per i due punti
  • Possiamo considerare anche equazioni di grado più
    alto (secondo o terzo) per ottenere
    interpolazioni più precise, ma abbiamo bisogno di
    più punti

20
Curve parametriche
  • Quando interpolo tra due punti linterpolazione
    lineare è sufficiente
  • Quando ho più punti posso usare interpolazione
    lineare tra ogni coppia di punti successivi ma
    ottengo un percorso che presenta discontinuità di
    curvatura nei punti

21
Curve parametriche
  • Per risolvere il problema posso utilizzare una
    curva di grado stabilito che interpoli o
    approssimi i punti.
  • La curva avrà equazione
  • Esistono differenti schemi di costruzione della
    curva (Bezier, B-Spline, NURBS,etc)

22
Smooth shading (interpolato)
  • Interpolazione di Gouraud
  • glShadeModel(GL_SMOOTH)
  • Interpolazione di Phong

23
Gouraud
Le normali ai vertici di un poliedro vengono
interpolate
  • Gouraud usa interpolazione bilineare per
    calcolare il colore dei pixel lungo i singoli
    poligoni, quindi
  • prima calcola colore ai vertici
  • poi interpola colore

24
Interpolazione bilineare
interpoliamo lungo una linea di scansione
25
Dipende dallorientamento
26
Phong Smoothing
  • Basato sullinterpolazione delle normali
  • il colore si calcola alla fine sul singolo pixel

27
Gouraud vs. Phong shading
  • hardware
  • veloce
  • continuo fino al I ordine
  • effetti lucentezza limitati (migliorano se si
    aumenta la triangolazione)
  • software
  • lento
  • continuo fino al II ordine
  • si può applicare modello di Phong per lucentezza

28
Sorgenti di luce in OGL
  • glLightfv(source, parameter, pointer_to_array)
  • glLightf(source, parameter, value)
  • I parametri sono
  • Posizione (direzione) della sorgente
  • Livelli di
  • Ambiente
  • Diffusa
  • Speculare
  • Associati alla sorgente

29
GLFloat light0_pos1.0, 2.0, 3.0, 1.0
Se si pone quarta componente a 0 la sorgente è
allinfinito e definita come direzione
GLFloat light0_dir1.0, 2.0, 3.0, 0.0
Sorgente bianca con componenti di tutti e tre i
tipi
GLFloat diffuse01.0, 0.0, 0.0, 1.0
GLFloat ambient01.0, 0.0, 0.0, 1.0
GLFloat specular01.0, 0.0, 0.0, 1.0
30
glEnableGL_LIGHTING glEnableGL_LIGHT0 glLig
htfv(GL_LIGHT0, GL_POSITION, light0_pos) glLightf
v(GL_LIGHT0, GL_AMBIENT, ambient0) glLightfv(GL_L
IGHT0, GL_DIFFUSE, diffuse0) glLightfv(GL_LIGHT0,
GL_SPECULAR, specular0)
Se vogliamo comunque un contributo ambiente
indipendente
GLFloat global_ambient0.1, 0.1, 0.1,
1.0 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,
global_ambient)
31
Se vogliamo inserire un termine di attenuazione
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION,
a) glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION,
b) glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION,
c)
Si può convertire la sorgente da puntiforme a
spot, specificando direzione
GL_SPOT_DIRECTION esponente GL_SPOT_EXPONENT
angolo di soglia GL_SPOT_CUTOFF Si usa sempre
la glLightf o glLightfv
32
  • OGL assume sempre losservatore a distanza
    infinita, in modo da considerare costante la
    direzione del viewer da ogni punto della scena
  • Per forzare losservatore a condizioni di
    distanza non infinita si usa la

glLightModel(GL_LIGHT_MODEL_LOCAL_VIEWER,
GL_TRUE)
33
  • OGL non si preoccupa di fare shading delle facce
    nascoste se si desidera vedere facce nascoste si
    può forzare con

glLightModel(GL_LIGHT_MODEL_TWO_SIDED,GL_TRUE)
34
OGL e i materiali
glMaterialf(face, value) glMaterialfv(face, type,
pointer_to_array)
GLFloat diffuse11.0, 0.8, 0.0, 1.0
GLFloat ambient10.2, 0.2, 0.2, 1.0
GLFloat specular11.0, 1.0, 1.0, 1.0
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT,
ambient1) glMaterialfv(GL_FRONT_AND_BACK,
GL_DIFFUSE, diffuse1) glMaterialfv(GL_FR
ONT_AND_BACK, GL_SPECULAR, specular1)
35
Con GL_FRONT e GL_BACK si specificano proprietà
differenti per le facce frontali e
nascoste Lesponente nella componente speculare
si specifica con GL_SHININESS OGL permette di
definire oggetti con componente
emissiva GLFloat emission0.0, 0.3, 0.3,
1.0 glMaterialfv(GL_FRONT_AND_BACK,
GL_EMISSION, emission)
Write a Comment
User Comments (0)
About PowerShow.com