2015-02-24 21 views
6

Nel rendering 3D (o nella geometria), nell'algoritmo di rasterizzazione, quando proietti i vertici di un triangolo sullo schermo e poi scopri se un pixel si sovrappone al triangolo 2D, spesso devi trovare la profondità o la z -coordinato del triangolo che il pixel si sovrappone. Generalmente, il metodo consiste nel calcolare le coordinate baricentriche del pixel nell'immagine 2D "proiettata" del triangolo, e quindi utilizzare queste coordinate per interpolare i triangoli originali z dei vertici originali (prima che i vertici venissero proiettati).Proiezione prospettica: provando che 1/z è lineare?

Ora è scritto in tutti i libri di testo che non si può interpolare i vertici coordinate dei vertici direttamente, ma che avete bisogno di fare questo, invece:

(? Mi dispiace non è possibile ottenere in lattice al lavoro)

1/z = w0 * 1/v0.z + w1 * 1/v1.z + w2 * 1/v2.z

Dove w0, w1, w2 e sono le coordinate baricentriche del "pixel" a il triangolo.

Ora, quello che sto cercando dopo, sono due cose:

  • quale sarebbe la prova formale per dimostrare che l'interpolazione z non funziona?
  • quale sarebbe la prova formale per dimostrare che 1/z fa la cosa giusta?

Per mostrare questo non è il lavoro a casa ;-) e che ho fatto qualche lavoro per conto mio, ho trovato la seguente spiegazione per la domanda 2.

Fondamentalmente un triangolo può essere definita da un aereo equazione. Così si può scrivere:

Ax + By + Cz = D.

Poi isolare z ottenere z = (D - Ax - By)/C

Poi dividi questa formula z come si farebbe con una divisione prospettiva e se si sviluppano, raggruppare, ecc si ottiene:

1/z = C/D + a/D x/z + B/D y/z.

Poi noi chiamiamo C '= C/D B' = B/D e A '= A/D si ottiene:

1/z = A'x/z + B'y/z + C '

Si dice che x/z e y/z sono solo le coordinate dei punti sui triangoli una volta proiettati sullo schermo e che l'equazione a destra è una funzione "affine" quindi 1/z è un lineare funzione???

Non mi sembra una dimostrazione? O forse è l'idea giusta, ma non si può davvero dire come si può capire osservando l'equazione che questa è una funzione affine. Se si moltiplica tutti i termini si ottiene solo:

A'x + B'y + C'z = 1.

che è solo fondamentalmente le nostre equazioni originali (basta sostituire A 'B' e C 'con il termine corretto).

+0

Sfortunatamente [LaTeX non è abilitato su StackOverflow] (http://meta.stackexchange.com/questions/30559/latex-on-stack-overflow). –

+0

Considera il caso di suddividere il tuo triangolo. Si noti che il centro del triangolo originale non proietta al centro degli angoli proiettati del triangolo originale. – Ben

risposta

0

Non sei sicuro di quello che si sta cercando di fare qui, ma se si guarda:

1/z = A'x/z + B'y/z + C' 

e riscrivere come:

1/z = A'u + B'v + C' 

dove (u,v) sono coordinate dello schermo del triangolo dopo la proiezione prospettica , puoi vedere che la profondità (z) di un punto sul triangolo non è linearmente correlata a (u,v) ma è 1/depth ed è quello che i libri di testo stanno cercando di insegnarti.