Quindi sto scrivendo la mia pipeline di trasformazione 3D personalizzata per ottenere una migliore comprensione di come tutto funziona. Posso ottenere tutto il rendering sullo schermo correttamente e ora sto per tornare indietro e osservare il ritaglio.Il valore Z dopo la divisione prospettiva è sempre inferiore a -1
Dalla mia comprensione, dovrei ritagliare un vertice se il valore xey dopo la divisione prospettica è fuori dai limiti di [-1, 1] e nel mio caso se il valore z è fuori dai limiti di [ 0, 1].
Quando lo implemento, tuttavia, il mio valore z è sempre -1.xxxxxxxxxxx dove xxxxxxx è un numero molto piccolo.
Questo è un po 'lungo, e mi scuso, ma volevo assicurarmi di dare tutte le informazioni che potevo.
prime convenzioni:
Io sto usando un sistema di mancino in cui una matrice simile a questa:
[m00, m01, m02, m03]
[m10, m11, m12, m13]
[m20, m21, m22, m23]
[m30, m31, m32, m33]
E i miei vettori sono colonne simile a questo:
[x]
[y]
[z]
[w]
La mia fotocamera è configurata con:
Un punto di vista verticale in radianti di PI/4.
una razione aspetto del 1. (Piazza vista porto)
Un valore di clip nei pressi di 1.
Un valore clip di gran lunga del 1000.
una posizione iniziale mondo x 0.
Una posizione iniziale y mondiale pari a 0.
Una posizione iniziale z di -500.
La fotocamera è lungo l'asse posizione Z (0, 0, 1)
Dato un vertice, le opere conduttura come questo:
Fase 1: Moltiplicare il vertice dalla matrice telecamera .
Passaggio 2: Moltiplica il vertice per la matrice di proiezione.
matrice proiezione è:
[2.41421, 0, 0, 0]
[0 2.41421, 0, 0]
[0, 0, 1.001001, 1]
[0, 0, -1.001001, 0]
Fase 3: Moltiplicare x, yez componenti da 1/w.
Passaggio 4: [Qui è dove il problema è] Ritaglia il vertice se i limiti esterni.
Passaggio 5: Converti in coordinate schermo.
Un esempio vertice che ho è
(-100, -100, 0, 1)
Dopo moltiplicando dalla matrice telecamera ottengo:
(-100, -100, 500, 1)
che ha senso perché rispetto alla camera, che vertice è di 100 unità al a sinistra e in basso e 500 unità avanti. E 'anche tra breve clip 1 e clip lontana del 1000. W è ancora 1.
Dopo moltiplicandola per la matrice di proiezione ottengo:
(-241.42135, -241.42135, 601.600600, -600.600600)
Questo non sono sicuro se fa senso. Le xey sembrano corrette, ma sono incerto su z e w dal momento che il prossimo passo della divisione prospettica è strano.
Dopo il divario prospettiva ottengo:
(0.401966, 0.401966, -1.001665, 1)
Ancora x ed y hanno senso, sono entrambi entro i limiti della [-1, 1]. Ma il valore z è chiaramente al di fuori dei limiti anche se credo che dovrebbe essere ancora all'interno del frustrum. W è tornato a 1 che ha ancora senso.
Ancora scuse per il romanzo, ma spero che qualcuno possa aiutarmi a capire cosa sto facendo in modo errato.
Grazie!
Roba buona. Mi fa piacere sapere che hai capito ":)" –
Grazie per il tuo aiuto, lo apprezzo molto. – Jon