Perché larghezza e altezza sono divise per 2 nella matrice di proiezione prospettica?


9

Sto usando OpenGL per imparare la computer grafica. Sto cercando di capire le matrici di proiezione. Quanto segue è mostrato nel "Red Book" di OpenGL:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Non capisco perché la larghezza e l'altezza siano divise per 2?

Risposte:


11

Poiché non varia da , varia da .xproj0widthwidth2width2

L'importante non è la larghezza, ma i valori minimo e massimo di . Poiché trova al centro della finestra, non nell'angolo, i valori minimo e massimo sono più e meno la metà della larghezza.xproj(0,0)


A proposito, il Red Book non è una grande introduzione alla grafica in generale. È uno standard tecnico, non un tutorial, quindi la spiegazione dei concetti è appena sufficiente per non essere inequivocabile: non sta cercando di insegnare il materiale. Riguarda anche una libreria di rendering scanline, quindi ci sono molti concetti importanti che non descrive affatto, come ad esempio ciò che i BRDF sono importanti, come si relazionano con le proprietà della superficie del mondo reale, che cosa è realmente un'immagine, e molti tecniche di livello superiore.

E infine, anche nell'area si tratta - come utilizzare una GPU per accelerare il rendering - è orribilmente obsoleto. L'architettura GL si basa su GPU di 20 anni fa. Sebbene siano state aggiunte molte funzionalità per tenere il passo con le modifiche all'hardware, le astrazioni fondamentali non sono un buon modo per comprendere le architetture GPU attuali.

Se vuoi conoscere la teoria della computer grafica, inizia con un libro di testo appropriato come Rendering basato sulla fisica o Computer grafica: principi e pratica, o un corso online. Se vuoi imparare come creare un'applicazione 3D, inizia con un tutorial sul tipo di applicazione che ti interessa (ad esempio se si tratta di un gioco, prova un tutorial Unity).


Wow, questo è esattamente quello che stavo cercando. Ho iniziato a leggere un libro di testo sull'algebra lineare ... ma che tipo di matematica devo conoscere per il rendering basato sulla fisica?
mikeglaz,

2
Aspetta, intendevi "Perché non varia da "? xproj0width
mikeglaz,

Per openGL deve proiettare su coordinate del dispositivo normalizzate (da -1 a 1) in modo da scalare da -Larghezza / 2 a Larghezza / 2
PaulHK

Dovresti fare un'altra domanda su PBR, ma ecco una buona risorsa: learnopengl.com/#!PBR/Theory
Alan Wolfe,

@mikeglaz, grazie. Direi che se conosci un po 'di algebra lineare e ottica al liceo, stai bene. Qualsiasi dettaglio che non hai già capito, avrai già le basi per capire leggendo la pagina Wikipedia appropriata.
Dan Hulme
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.