Introduzione - PowerPoint PPT Presentation

1 / 21
About This Presentation
Title:

Introduzione

Description:

Title: Trasformazioni geometriche Author: Sara Comai Last modified by: caglioti Created Date: 9/19/1999 5:06:49 PM Document presentation format: Presentazione su schermo – PowerPoint PPT presentation

Number of Views:78
Avg rating:3.0/5.0
Slides: 22
Provided by: SaraC51
Category:

less

Transcript and Presenter's Notes

Title: Introduzione


1
Introduzione
  • Quando si rappresentano modelli di oggetti 3D
    costituiti da facce poligonali secondo delle
    proiezioni alcune delle facce non sono visibili.
  • Bisogna mostrare sul piano di proiezione
    solamente le facce visibili.
  • Esistono diverse strategie per
  • determinare quali facce sono visibili
  • rimuovere le superfici nascoste

2
Back face culling
  • Molti oggetti sono tali che il loro volume è
    racchiuso da superfici (es. cubo).
  • Quando guardiamo questi oggetti possiamo vedere
    solo le facce che stanno di fronte a noi, ma non
    quelle dietro.
  • Quando i poliedri sono convessi è possibile
    applicare la tecnica di back face culling per
    determinare le superfici visibili. Nel caso di
    poliedri concavi viene comunque impiegata, anche
    se non elimina completamente tutte le facce
    nascoste.

3
Back face culling (2)
  • Questa tecnica utilizza il concetto di vettore
    normale alla superficie.
  • Un poligono è visibile se la normale alla
    superficie rispetto al vettore che va
    dallosservatore al punto del piano è inferiore a
    90.

4
Back face culling (3)

Per calcolare la normale alla superficie basta
considerare due lati consecutivi del poligono, in
ordine antiorario (per convenzione), e calcolarne
il prodotto vettoriale
5
Back face culling (4)

Occorre quindi effettuare il prodotto scalare tra
questa normale ed il vettore che va
dallosservatore al punto della faccia. Se il
prodotto scalare è negativo la faccia è visibile.
Assumendo di aver già compiuto la proiezione
prospettica il prodotto scalare si riduce a
selezionare il poligono facendo semplicemente un
test sulla coordinata z della normale alla
superficie se è negativa la faccia è visibile.
6
Back face culling (5)

Solitamente questa tecnica viene applicata prima
di compiere eventuali clipping, in modo da
ridurre il numero di poligoni da clippare. I
vettori normali possono essere pre-computati per
tutte le direzioni possibili della faccia (per
tutte le rotazioni e scaling non uniformi 3D). Si
noti che i vettori normali vengono utilizzati
anche per lilluminazione della superficie.
7
Back to front sorting
  • Il back face culling non è in grado di eliminare
    tutte le superfici nascoste se il poliedro è
    concavo infatti, non individua eventuali
    sovrapposizioni tra poligoni.
  • Lo stesso problema si verifica se il mondo
    contiene 2 o più poliedri (anche se convessi).

8
Back to front sorting (2)
  • Una tecnica per risolvere questo problema
    consiste nello sfruttare le architetture frame
    buffer degli hardware grafici (matrice di memoria
    in cui si rappresenta il grafico).
  • Ogni volta che un poligono nella scena può
    oscurare un altro poligono, è possibile
    rappresentare correttamente la scena disegnando
    (rasterizzando) le primitive in ordine inverso
    dalla più distante alla più vicina
    allosservatore, in modo da sovrascrivere gli
    oggetti più distanti.
  • Questa tecnica è nota anche come algoritmo del
    pittore.

9
Back to front sorting (3)
  • Per ottenere un algoritmo back-to-front basta
    applicare un algoritmo di sorting utilizzando un
    particolare criterio di comparazione.
  • Il criterio più semplice effettua lordinamento
    rispetto alla massima coordinata z.
  • Algoritmi di sorting
  • Bubble-sort (complessità O(n2))
  • Quick-sort (complessità O(n log n))
  • Radix-sort (complessità O(n) lineare!! -
    richiede però più memoria!)

10
Ripasso algoritmi
  • ORDINAMENTO PER SCAMBIO
  • void ordinamentoScambio(int vett, int dim)
  • int ordinato int temp ordinato FALSO
  • while (!ordinato)
  • ordinato VERO
  • for(int j 0 j lt dim-1 j)
  • if (vettj gt vettj1)
  • temp vettj vettj
    vettj1 vettj1 temp
  • ordinato FALSO

11
Ripasso algoritmi
  • ORDINAMENTO PER INSERIMENTO
  • void ordinamentoInserimento(int vett, int dim)
  • int curr
  • for(int i 1 i lt dim i)
  • curr vetti
  • int j i
  • while ((j gt 0) (curr lt vettj-1))
  • vettj vettj-1
  • j--
  • vettj curr

12
Ripasso algoritmi
  • ORDINAMENTO PER SELEZIONE
  • void ordinamentoSelezione(int vett, int dim)
  • int temp, posmin
  • for(int i 0 i lt dim-1 i)
  • posmin i
  • for(int j i 1 j lt dim j)
  • if (vettj lt vettposmin)
  • posmin j
  • temp vetti
  • vetti vettposmin
  • vettposmin temp

13
Ripasso algoritmi
  • Quick sort
  • void quicksort (int left, int right, int array
    )
  • int i 0, j 0, pivot 0
  • i left j right
  • pivot array(left right) / 2
  • do
  • while (arrayi lt pivot) i
  • while (pivot lt arrayj) j--
  • if (i lt j)
  • swap (arrayi, arrayj)
  • i
  • j--
  • while (!(i gt j))
  • if (left lt j) quicksort(left, j, array)
  • if (i lt right) quicksort(i, right, array)

14
Back to front sorting (4)
  • Radix-sort
  • Sfrutta il fatto che è molto facile ordinare un
    array di numeri che appartengono ad un range
    limitato di valori.

15
Back to front sorting (5)
  • Con questo algoritmo vengono ordinate le radici
    (es. unità, decine, centinaia etc. in base 10),
    dalle meno significative (unità in base 10) alle
    più significative.
  • Al primo passo si ordinano i numeri rispetto alla
    prima radice (ad es. le unità).
  • Al secondo passo si ordinano i numeri ordinati al
    passo precedente rispetto alla seconda radice (ad
    es. le decine). E così via.
  • Ad ogni passo occorre preservare lordine dei
    passi precedenti.
  • Numero di iterazioni necessarie numero dei dati
    x numero delle radici (costante per un insieme
    dato di numeri) --gt complessità lineare

16
Back to front sorting (6)
  • Questalgoritmo funziona molto bene per numeri in
    base 2 (il test può essere compiuto con un AND).
  • Codice
  • // consideriamo numeri da 8 bit
  • short data
  • short oneArraynumData, zeroArraynumData
  • int numOnes, numZeros
  • int mask1 //per calcolare lAND
  • for (radix0 radixlt8 radix)
  • numZeros0
  • numOnes0

17
Back to front sorting (7)
  • for (i0 iltnumData i)
  • if(dataimask)
  • oneArraynumOnesdatai
  • numOnes
  • else
  • zeroArraynumZerosdatai
  • numZeros
  • memcpy(data,oneArray,numOnes)
  • memcpy(data(numOnes),zeroArray,
  • numZeros)
  • maskltlt1

18
Back to front sorting (8)
  • Nota memcpy(s,ct,n) copia n caratteri di ct in s
    e restituisce s
  • Il criterio di scegliere la z massima non è
    corretto in generale

19
Back to front sorting (9)
  • Lordinamento basato sulla massima z oppure sulla
    z media è ammissibile quando i poligoni hanno la
    stessa dimensione, altrimenti è necessario
    applicare metodi di sorting più complessi.
  • Ad es. nel seguente grafico o nel grafico
    precedente si può applicare la z media.

20
Back to front sorting (10)
  • In questesempio però non funziona neppure la z
    media
  • Lalgoritmo del pittore, può essere ancora
    applicato.

21
Back to front sorting (11)
  • Se invece si ha mutua sovrapposizione di poligoni
    lalgoritmo del pittore non si può più applicare.
    Non è possibile ordinare in nessun modo i
    poligoni.
Write a Comment
User Comments (0)
About PowerShow.com