Come interpolare i vertici durante il ritaglio?
Quando agganciamo in uno spazio di ritaglio omogeneo, dobbiamo generare un nuovo vertice situato all'intersezione tra il bordo e il piano di ritaglio. Dobbiamo quindi interpolare il file$(x , y, z , w)$posizione di entrambi i vertici per generare la nuova posizione del vertice. Sembra tutto a posto, ma cosa devo fare quando il vertice generato dopo l'interpolazione ha aw di 0?
Non funziona perché la divisione w fa andare il punto all'infinito (divisione per zero).
Quindi dovrei assicurarmi di non generare mai vertici con aw di 0 (come?)? O dovrei solo occuparmi del null w (come?)?
Si potrebbe dire che questa situazione non si verifica mai, ma in realtà accade, specialmente quando la z dei vertici è impostata su w, ad esempio per gli skybox. In questo caso, quando agganciamo contro il piano vicino (z = 0 nello spazio di clip) e interpoliamo la posizione, finiremo con az di 0 ma anche aw di 0 ...
Risposte
I punti davanti alla telecamera hanno $w > 0$rigorosamente, per definizione. Direi che se il ritaglio ti dà punti con$w = 0$ allora qualcosa sta andando storto.
Considera i piani di clip sinistro / destro / superiore / inferiore. Non c'è modo che un triangolo possa estendersi da una parte del tronco visibile, al$w = 0$ piano della telecamera o dietro di esso, senza attraversare anche all'esterno di uno dei piani laterali del tronco, oppure il piano vicino, che si trova a una certa distanza positiva $w_\text{near} > 0$.
Hai parlato di skybox e ambientazione $z = w$nell'output del vertex shader. Tale geometria deve attraversare i piani laterali tronco prima che possa arrivare al piano vicino. (Come può una parte di uno skybox avvicinarsi abbastanza alla fotocamera da essere ritagliata solo dal piano vicino?) Se la stai ritagliando correttamente contro tutti i piani del tronco, devi finire con$w > 0$ nel vertice finale.