Sobre la transformació de coordenades de models 3D
substància
En primer lloc
Sovint podeu veure imatges 3D a les pantalles de televisió i pantalles dels jocs, però com es mostren objectes que existeixen a l'espai 3D, com ara personatges i edificis que es mouen a la pantalla, en una pantalla 2D?
En els jocs 2D, només hi ha elements bidimensionals de "X i Y" com a valors de coordenades, i la pantalla també és 2D, de manera que si dibuixeu un objecte especificant la posició de les coordenades de X i Y, entendreu intuïtivament com es dibuixarà en quina posició.
No obstant això, en 3D, no és tan fàcil. Com el seu nom indica, 3D és "3 dimensions" i té tres dades de coordenades: "X, Y i Z". Com que les coordenades són diferents de la pantalla que és 2D, no és possible dibuixar l'objecte tal com és.
Aleshores, què fer és "convertir informació tridimensional en informació bidimensional". Això es coneix comunament com a "transformació de coordenades". Tingueu en compte que aquesta transformació de coordenades és essencial per a la programació 3D.
Hi ha diversos tipus de transformacions de coordenades per convertir 3D a 2D, però hi ha tres tipus principals de transformacions de coordenades que gestionen els programadors: "transformació del món", "transformació de visió" i "transformació de projecció". Aquí t'explicarem tot el relacionat amb la transformació de coordenades.
Sistemes de coordenades esquerranes i dretanes
En 3D, hi ha dos sistemes de coordenades, el "sistema de coordenades de la mà esquerra" i el "sistema de coordenades de la dreta", que tenen diferents orientacions per a cada coordenada, com es mostra a la figura següent.
Direct3D utilitzava principalment un sistema de coordenades per a esquerrans, però també hi ha funcions per calcular per a sistemes de coordenades per a dretans. Tanmateix, XNA només proporciona mètodes de càlcul per a sistemes de coordenades dretans. Això sembla estar en línia amb el fet que altres aplicacions sovint utilitzen sistemes de coordenades per a dretans.
Tots els consells XNA d'aquest lloc utilitzen el sistema de coordenades de la mà dreta.
Sistema de coordenades local (sistema de coordenades del model)
Cada model té un sistema de coordenades centrat en l'origen. A l'hora de crear un model amb programari de modelatge, crec que és més fàcil d'entendre si t'imagines creant-lo amb l'origen com a centre.
Sistema de coordenades mundials
El sistema de coordenades mundials permet col·locar el model a qualsevol lloc. Si no feu res en aquesta transformació del món, el model es col·locarà a l'origen de la mateixa manera que les coordenades locals. La col·locació no és només moure's des de l'origen, sinó també girar i escalar.
Visualitza el sistema de coordenades
Un cop hàgiu col·locat el model en coordenades mundials, necessiteu informació sobre on esteu mirant i on esteu mirant l'espai 3D. Això és el que anomenem "transformacions de visió". Les transformacions de vista generalment es representen com a càmeres.
Els paràmetres necessaris per a aquesta conversió són "posició de la càmera", "punt d'interès de la càmera" i "direcció cap amunt de la càmera". L'orientació de la càmera està determinada per aquests tres paràmetres. La figura següent mostra la càmera des d'una perspectiva de tercers.
La figura següent es veu realment des del punt de vista de la càmera amb la disposició que es mostra a la figura anterior (en aquest punt, encara no hem convertit les coordenades a la pantalla, de manera que és només una imatge).
En l'explicació anterior, sembla que la càmera es col·loca i les coordenades es transformen, però en el càlcul real, les coordenades mundials es converteixen segons la posició i l'orientació de la càmera. Per tant, l'origen és la posició de la càmera tal com es mostra a la figura següent.
Sistema de coordenades projectives
Un cop decidit des de quina posició veure l'espai 3D, el següent pas és processar la visualització de "objectes petits que estan lluny" i "coses grans que estan a prop". Això s'anomena transformació projectiva. Hi ha dos mètodes de transformació de projecció, "projecció en perspectiva" i "projecció ortogràfica", però la imatge de "projecció en perspectiva" d'ús comú és la següent.
La projecció en perspectiva utilitza els paràmetres següents: Angle de visió, Relació d'aspecte, Posició del clip cap endavant i Posició del clip posterior. L'àrea etiquetada com a "frustum" a la figura de dalt finalment apareixerà a la pantalla.
"Angle de visió" especifica el rang de visualització visible des de la càmera. En disminuir l'angle s'apropa, augmentar-lo s'allunya. L'angle de visió serà el valor vertical del frustum.
La relació d'aspecte s'utilitza per determinar l'angle de visió horitzontal, mentre que l'angle de visió és un angle vertical. L'angle horitzontal sol estar determinat per l'angle de visió × la relació d'aspecte, i la relació d'aspecte és bàsicament el valor de l'"amplada ÷ alçada" de la pantalla que intenteu mostrar. Si canvieu aquest valor, l'objecte 3D mostrat semblarà estirar-se horitzontalment o verticalment.
La posició del clip cap endavant i la posició del clip posterior s'especifiquen per determinar si l'objecte es mostra a la gamma frontal o posterior. A causa de la naturalesa de l'ordinador, no és possible mostrar fins a l'infinit, per la qual cosa establirem un límit. Aquest valor també afecta la precisió de la memòria intermèdia Z, per la qual cosa no es recomana incloure'l a l'àrea de dibuix més enllà de l'interval que no cal mostrar.
L'objecte transformat en perspectiva es converteix en un espai com el de sota. Els objectes que estaven a prop de la càmera s'amplien i els objectes que estaven lluny es redueixen.
Això s'il·lustra en un diagrama fàcil d'entendre a continuació.
Si realment ho mireu des del punt de vista de la càmera, es veu com a continuació.
Un altre mètode de transformació projectiva és la projecció ortogràfica, que projecta una àrea visible com la de sota. Com que l'amplada i l'alçada són constants independentment de la profunditat, la mida de l'objecte no canvia amb la profunditat.
Sistema de coordenades de pantalla
Després de la transformació de la projecció, es converteix a les coordenades de la pantalla real. Tot i que es tracta d'una pantalla, la posició i l'abast de la pantalla canvien en funció de la configuració de la finestra de visualització establerta al dispositiu. Tanmateix, en el cas dels jocs, les coordenades del client de la finestra solen ser la finestra de visualització tal com és, així que no crec que us hàgiu de preocupar massa.
Les coordenades de la pantalla (0, 0) es converteixen a partir de les coordenades de projecció (-1, 1, z). De la mateixa manera, les coordenades de la pantalla (amplada, alçada) es converteixen a partir de les coordenades de projecció (1, -1, z).