architettura di ogl e pipe-line daniele marini corso di programmazione grafica aa2006/2007

27
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Upload: elma-zanella

Post on 02-May-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Architettura di OGL e pipe-line

Daniele Marini

Corso Di Programmazione Grafica aa2006/2007

Page 2: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 2

Pipeline - 1

• Funzione principale della pipeline di rendering è generare (renderizzare) un’immagine bidimensionale, dati:– una camera virtuale, – oggetti tridimensionali, – sorgenti di luce, – modelli di illuminazione, – texture ed effetti– ecc….

Page 3: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 3

Pipeline - 2

• Fasi concettuali:

• Ogni fase può essere a sua volta una pipeline.

• L’elemento della pipeline più lento determina la velocità di rendering (misurata in frames per second, o fps).

Application Geometry Rasterizer

Page 4: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 4

Application stage - 1

• E’ sempre implementata via software• Quindi il programmatore ha pieno

controllo dell’implementazione• Non è suddivisa in ulteriori pipeline• Può essere eseguita in parallelo su

numerosi processori per aumentare le prestazioni

Page 5: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 5

Application stage - 2

• Processi normalmente considerati e implementati in questa fase:– Collision detection– Input da joystick, tastiera, mouse, ecc….– Geometry morphing, animazione via

trasformazioni, ecc…..– Algoritmi di accelerazione

• Alla fine di questi processi la geometria viene inviata allo stadio successivo.

Page 6: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 6

Geometry stage

• In questa fase viene eseguita la maggior parte di operazioni sui poligoni e sui vertici.

• E’ normalmente suddivisa in questo modo: Applic Geom Rast

Model and View

TransformLighting Projection Clipping

ScreenMapping

Page 7: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 7

Model and View Transform - 1

• In questa fase vengono applicate le trasformazioni ai vertici e alle normali della geometria passata dall’ Application stage.

• Dopo l’applicazione delle trasformazioni, si dice che la geometria è descritta in coordinate mondo (world coordinates).

Page 8: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 8

Model and View Transform - 2

• In questa fase vengono applicate anche le trasformazioni di vista.

• Lo scopo è facilitare le proiezioni e il clipping, posizionando la camera virtuale nell’origine e facendola guardare lungo l’asse negativo delle z (prospettiva canonica).

• Dopo l’applicazione di queste trasformazioni, si dice che la geometria è descritta in coordinate occhio o camera (camera coordinates o eye coordinates).

Page 9: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 9

Lighting and Shading

• In questa fase normalmente vengono applicati modelli di illuminazione che cercano di simulare l’interazione tra luce e materiali dei modelli della scena.

• In grafica real-time vengono utilizzati normalmente modelli di illuminazione locali, che calcolano il colore di un vertice considerando il materiale dell’oggetto, la posizione del vertice e la sua normale, e la posizione della luce.

Page 10: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 10

Projection - 1

• In questa fase il volume di vista viene trasformato in un cubo con estremi in: (-1,-1,-1) e (1,1,1) , chiamato volume di vista canonico.

• Esistono due tipi di proiezione:– Ortografica (o parallela): il volume di vista è un

parallelepipedo, linee parallele rimangono parallele.

– Prospettica: il volume di vista è un tronco di piramide a base rettangolare (frustum), linee parallele possono convergere all’orizzonte.

Page 11: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 11

Projection - 2

• Proiezione ortografica

Page 12: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 12

Projection - 3

• Proiezione prospettica

Page 13: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 13

Projection - 4

• Le proiezioni, come le trasformazioni di modellazione e di vista, sono rappresentate da matrici 4x4.

• Dopo l’applicazione della proiezione, si dice che la geometria è descritta in coordinate dispositivo normalizzate (normalized device coordinates).

Page 14: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 14

Clipping

• Solo le primitive interamente o parzialmente dentro il volume di vista devono essere passate al rasterizer stage.

• Le primitive in parte dentro il volume vanno clippate per eliminare le parti fuori dal volume.

Page 15: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 15

Screen mapping

• Questa fase consiste nel mappare le coordinate tridimensionali (x,y,z) dei vertici nel cubo di lato unitario in coordinate bidimensionali (x’,y’) della finestra sullo schermo.

• Le coordinate z non sono modificate.• Le coordinate (x’,y’) sono dette

coordinate schermo (screen coordinates).

• Le coordinate schermo insieme alle coordinate z sono dette coordinate finestra (window coordinates)

Page 16: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 16

Riassunto coordinate Model and

ViewTransform

Lighting Projection ClippingScreen

Mapping

World Coord.3D

World Coord.4D (Omogenee)

Normalized DeviceCoord.

4D (Omogenee)

Window Coord.2D

(x’,y’) coordinate schermo+ coordinata z di profondità

mantenuta a parte

Page 17: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 17

Rasterizer stage - 1

• Scopo di quest’ultima fase è assegnare il colore corretto ai pixel dell’immagine finale, memorizzati nel color buffer.

• In questa fase si risolve il problema della visibilità: le coordinate z (memorizzate nello Z-buffer) dicono, per ogni pixel, quale primitiva è più “vicina” rispetto alle altre, e quindi qual è il colore da assegnare.

• Vengono anche calcolate le informazioni relative alle texture.

Page 18: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 18

Rasterizer stage - 2

• Altri buffer possono essere utilizzati in questa fase per effettuare operazioni sui pixel:– Alpha channel, per effetti di trasparenza– Stencil buffer, per vari effetti come ombre e

riflessioni– Accumulation buffer, per effetti di motion

blur.

• Alla fine di queste operazioni, l’immagine può essere visualizzata.

Page 19: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 19

La pipeline di OGL

pixel data

vertex data

display list

pixel operation

evaluator

rasterization per vertex op& primitiveassembly

textureassembly

per fragmentoperation

framebuffer

genera vertici da spline

trasformazionianche su texture

clipping,proiezioneprospettica

organizzatexture mappingsfrutta memorialocale x texture

possono essereriletti da FBoperazioni su gruppi di pixel

(BitBlt)

no DLimmediate

mode

effetti fogdithering

hiddden surfacemasking ...

Page 20: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 20

Display List

• Tutti i dati (geometria o pixel di texture) sono salvate in una display list

• Se la display list non viene usata si opera in modalità immediata, cioè i dati sono processati immediatamente

Page 21: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 21

Evaluator

• Tutte le primitive geometriche sono in ultima analisi descritte da vertici. Curve parametriche possono essere definite da punti di controllo e funzioni polinomiali (funzioni base). I vertici vengono ricavati dalla valutazione della curva parametrica.

• Fornisce anche normali, coordinate texture, colori e valori di coordinate spaziali di vertici dai punti di controllo

Page 22: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 22

Per-vertex operation

• I vertici vengono convertiti nello spazio omogenee 4D

• Viene calcolata la proiezione prospettica• Se le texture sono attivate vengono

generate le coordinate texture e traformate per la proiezione

• Se il modello di illuminazione è abilitato viene calcolato in questa fase, usando coordinate, normali, posizione delle sorgenti di luce, proprietà dei materiali per calcolare il colore

Page 23: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 23

Primitive assembly

• La parte prevalente dell’assemblaggio delle primitive è il clipping

• Il clipping di linee può generare nuovi vertici in corrispondenza dell’intersezione con i piani limite del frustum di visione

• Viene eseguita la divisione per la componente w ritornando nello spazio 3D

• Si applica la trasformazione window-to-viewport

• Se il face culling è abilitato si escludono le facce autonascoste

Page 24: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 24

Pixel operation

• I pixel dall’immagine di input vengono spacchettati in funzione del formato di ingresso

• I dati sono scalati e rinormalizzati• Se i pixel sono letti dal frame buffer

vengono ancora riscalati e rinormalizzati• Vengono gestiti anche i caratteri• Il risultato viene trasferito al frame buffer,

alla memoria texture o alla memoria centrale

Page 25: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 25

Texture assembly

• Le texture vengono applicate alla geometria

Page 26: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 26

Rasterization

• I dati geometrici e i pixel vengono convertiti in fragments

• Ogni fragment qudrato corrisponde a un pixel finale

• Se la conversione riguarda linee si applica l’antialiasing

• Se la conversione riguarda poligoni si applica il colore derivante dal modello di illuminazione

• Ogni fragment conserva l’informazione di profondità

Page 27: Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica aa2006/2007

Programmazione Grafica aa2006/2007 27

Fragment operation

• Al fragment viene associato un texel, elemento di texture calcolato in precedenza

• Se previsto si calcola l’effetto nebbia• Si calcola alpha test per effetti di

trsparenza, stencil test per effetti di mascheratura (es. ombre) e lo depth buffer test (z-buffer) per la rimozione delle facce nascoste

• Alla fine il fragment viene scritto nel frame buffer