2012-01-23 11 views
5

Sto cercando di imparare la programmazione grafica 3d attraverso "Learning Modern 3D Graphics Programming" di Jason L. McKesson.Nella grafica 3d, che cos'è lo spazio della fotocamera o degli occhi?

Non ho davvero guardato altre guide, ma questa guida sembra enfatizzare la teoria e la matematica dietro la grafica 3d. In questo momento, mi sono bloccato in questa pagina:

http://www.arcsynthesis.org/gltut/Positioning/Tut04%20Perspective%20Projection.html

io non sono esattamente sicuro che cosa intenda per lo spazio della macchina fotografica, e perché è necessario proiettare un mondo 3d su una superficie 2d. Questa domanda è piuttosto vaga, quindi invece di una spiegazione completa, anche i collegamenti che potrebbero darmi un modo diverso di spiegare questi concetti sarebbero apprezzati.

+0

Scusate, avrei dovuto chiarirlo: so perché è necessario proiettare un mondo 3d su una superficie 2D. Solo non sapevo perché lo spazio della fotocamera fosse necessario o utile a tal fine. – newprogrammer

risposta

5

perché è necessario proiettare un mondo 3d su una superficie 2d

Tutti i grafici è solo immagini 2D. La grafica 3D è quindi un sistema di produzione di colori per pixel che ti convincono che la scena che stai guardando è un mondo 3D piuttosto che un'immagine 2D. Il processo di conversione di un mondo 3D in un'immagine 2D di quel mondo è chiamato rendering.

A proiezione, ai fini del rendering, è un modo per trasformare un mondo da una dimensionalità all'altra. La nostra immagine di destinazione è bidimensionale e il nostro mondo iniziale è tridimensionale. Quindi, abbiamo bisogno di un modo per trasformare questo mondo 3D in uno 2D.

io non sono esattamente sicuro di cosa intende per spazio fotocamera

Prima di questo punto, le posizioni di vertice sono stati espressi direttamente nello spazio clip. Ricorda che la divisione per W fa parte delle posizioni dei vertici dello spazio clip. La proiezione prospettica è un modo per trasformare le posizioni nello spazio clip in modo tale che sembrino una proiezione prospettica di un mondo 3D.

Questo processo di trasformazione ha uscite ben definite: posizioni dello spazio clip. Ma quali sono esattamente i suoi valori di input?

Questo è lo spazio della fotocamera.

Questo spazio non è uno spazio riconosciuto da OpenGL (a differenza dello spazio clip che è esplicitamente definito da GL); è puramente una costruzione utente arbitraria. Tuttavia, può essere utile definire uno specifico spazio della fotocamera basato su ciò che sappiamo della nostra proiezione prospettica.Ciò minimizza le differenze tra lo spazio della fotocamera e la forma prospettica dello spazio clip e può semplificare la nostra logica di proiezione prospettica.

+0

OK grazie. Tutte le risposte a questa domanda erano buone, ma questa risposta spiegava davvero PERCHÉ abbiamo bisogno di definire uno spazio per la fotocamera. Non sono sicuro che sto capendo questo in modo corretto, ma penso che stavo avendo problemi a capire perché usa lo spazio della telecamera perché non sta facendo nulla per spostare la fotocamera ancora, quindi mi sono chiesto perché si stesse preoccupando questo in primo luogo. – newprogrammer

4

Lo spazio della fotocamera è il sistema di coordinate relativo alla telecamera. Quindi lo spazio della fotocamera è dove la geometria finisce immediatamente prima della proiezione.

Comunemente si inizia con le coordinate nello spazio modello. Sai come il modello si relaziona con il mondo in modo che tu possa mappare dallo spazio modello allo spazio mondiale. Hai quindi una fotocamera nel mondo e ne usi la conoscenza per mappare dallo spazio del mondo allo spazio della fotocamera. Se non ci fossero trasformazioni nello spazio rispetto alla fotocamera, la fotocamera non poteva muoversi.

La proiezione è necessaria perché il tuo mondo è 3d e lo schermo è 2d. Si proietta dal mondo 3d sulla 2d superficie del monitor del computer. Anche la stereoscopia è solo due proiezioni anziché una.

Non sono immediatamente a conoscenza di collegamenti migliori di quello che hai già fornito.

+0

La tua spiegazione sta aiutando molto, grazie. Questa guida non introduce spazi modello o telecamere in movimento fino a pochi capitoli dopo, ma ciò che hai detto sembra avere un senso intuitivo. – newprogrammer

+0

Inoltre, se sto capendo correttamente, lo spazio della fotocamera è PRIMA di qualsiasi proiezione su un piano 2D? – newprogrammer

+0

Sì - lo spazio della fotocamera è il risultato dell'ultima trasformazione prima della proiezione nel flusso di un renderizzatore di poligono standard. – Tommy

8

Bene, è necessario proiettare un mondo 3D su una superficie 2D poiché lo schermo è una superficie 2D.

La grafica 3D funziona in diversi "spazi di coordinate" e questi vengono convertiti per ottenere una scena finale.

Immaginate ad esempio di modellare una città. È possibile definire l'angolo in basso a sinistra della mappa come (0, 0) e in alto a destra come (1000000, 1000000). Si potrebbe anche dire che di regola un punto rappresenterà un piede di spazio reale. Questa rappresentazione chiameremo World Space.

Per disegnare la tua città, ti consigliamo di importare alcuni modelli di edifici e posizionarli nel mondo. Quindi prendi il tuo modello di un edificio, ma quando crei questo modello, non ti devi preoccupare delle dimensioni del mondo o di dove sarà - forse dirai che l'angolo in basso a sinistra dell'edificio è a (0, 0) e in alto a destra è a (1, 1). Questa rappresentazione chiameremo Spazio Modello. Nel mondo però, l'edificio potrebbe essere collocato in (104, 136) e potresti volere che sia 1000x1000 pixel, quindi dovrai tradurlo in (104, 136) e scalarlo di 1000x. Questo lo sta convertendo da Model Space a World Space.

Infine, Camera Space è il modo in cui ti muovi nel mondo. Se ci pensi, muoversi nel mondo potrebbe essere pensato in due modi (almeno): ti muovi per il mondo, o il mondo si muove intorno a te. Quindi, per semplificare il movimento, diremo che la fotocamera è sempre sul punto (0, 0) rivolto verso il basso su un asse. Ora se vuoi andare avanti di 10 pixel, devi semplicemente spostare tutto di 10 pixel. Se vuoi ruotare, ruota invece il mondo. Quindi per rendere l'edificio, prima vogliamo trasformarlo da Model Space in World Space. Ora, per disegnarlo effettivamente, vogliamo sapere dove si trova rispetto allo spettatore, quindi lo spostiamo da World Space a Camera Space.

. . .

Per inciso, se vuoi capirlo bene, un buon esercizio è scrivere un renderer 3D per wireframe, separato da OpenGL. La tua unica funzione di disegno disponibile è DrawLine (x1, y1, x2, y2) che disegna una linea sullo schermo da (x1, y1) a (x2, y2).

+0

Questa sarebbe la vera sfida. Grazie per la tua spiegazione! – newprogrammer

+1

Non è difficile come penseresti. Il motivo per cui utilizziamo le trasformazioni è in definitiva quello di fare quella proiezione finale sullo schermo e capire "dove diavolo fanno questi punti appartengono". Fondamentalmente, scrivere un renderer wireframe significherebbe solo che fai tu stesso tutte le moltiplicazioni della matrice - le traduzioni, le rotazioni e poi la proiezione. La parte veramente difficile della grafica 3D è l'ombreggiatura e il clipping, ma se stai scrivendo un renderer wireframe non dovrai preoccupartene. E ti farà davvero apprezzare e capire la matematica. – mindvirus

4

Per rispondere rapidamente

perché è necessario proiettare un mondo 3d su una superficie 2d

pensare di rappresentare un mondo 3D (w/e si definisce nel programma) utilizzando un Supporto 2D, ad esempio lo schermo. Tuttavia, per fare questo, è necessario un po 'di matematica complesse, quindi dipende da cosa in profondità nella tana del coniglio che si è disposti ad andare ...

Citando wikipedia (http://en.wikipedia.org/wiki/Graphics_pipeline):

oggetti si trasformano da coordinate spaziali 3D in un sistema di coordinate 3D basato sulla posizione e l'orientamento di una telecamera virtuale . Ciò si traduce nella scena 3D originale vista dal punto di vista della telecamera , definita in quello che è chiamato spazio dell'occhio o camera spazio. La trasformazione normalizzante è l'inverso matematico di la trasformazione di visualizzazione e le mappe da un sistema di coordinate arbitrario specificato dall'utente (u, v, w) a un sistema di coordinate canonico (x, y, z).

+0

Sto andando nel profondo come questa guida, e sembra che sto andando abbastanza in profondità! – newprogrammer

Problemi correlati