Despre transformarea coordonatelor modelelor 3D

Pagina actualizată :
Data creării paginii :

substanță

în primul rând

Este posibil să vedeți adesea imagini 3D pe ecranele televizoarelor și pe ecranele din jocuri, dar cum afișați obiectele care există în spațiul 3D, cum ar fi personajele și clădirile care se mișcă pe ecran, pe un ecran 2D?

În jocurile 2D, există doar elemente bidimensionale ale "X și Y" ca valori de coordonate, iar afișajul este, de asemenea, 2D, așa că dacă desenați un obiect specificând poziția coordonatelor X și Y, veți înțelege intuitiv cum va fi desenat în ce poziție.

Cu toate acestea, în 3D, nu este atât de ușor. După cum sugerează și numele, 3D este "3 dimensiuni" și are trei informații de coordonate: "X, Y și Z". Deoarece coordonatele sunt diferite de afișajul 2D, nu este posibil să desenați obiectul așa cum este.

Apoi, ce trebuie făcut este să "convertiți informațiile tridimensionale în informații bidimensionale". Aceasta este denumită în mod obișnuit "transformare coordonată". Rețineți că această transformare a coordonatelor este esențială pentru programarea 3D.

Există mai multe tipuri de transformări de coordonate pentru conversia 3D în 2D, dar există trei tipuri principale de transformări de coordonate pe care programatorii le gestionează: "transformarea lumii", "transformarea vizualizării" și "transformarea proiecției". Aici, vom explica tot ce ține de transformarea coordonatelor.

Sisteme de coordonate pentru stângaci și dreptaci

În 3D, există două sisteme de coordonate, "sistemul de coordonate pentru stânga" și "sistemul de coordonate pentru dreapta", care au orientări diferite pentru fiecare coordonată, așa cum se arată în figura de mai jos.

Direct3D a folosit în principal un sistem de coordonate pentru stângaci, dar există și funcții pentru calcul pentru sistemele de coordonate pentru dreptaci. Cu toate acestea, XNA oferă metode de calcul numai pentru sistemele de coordonate dreptaci. Acest lucru pare să fie în concordanță cu faptul că alte aplicații folosesc adesea sisteme de coordonate pentru dreptaci.

Toate sfaturile XNA de pe acest site folosesc sistemul de coordonate pentru dreapta.

Sistem de coordonate local (sistem de coordonate model)

Fiecare model are un sistem de coordonate centrat pe origine. Când creați un model cu software de modelare, cred că este mai ușor de înțeles dacă vă imaginați că îl creați cu originea ca centru.

Sistemul de coordonate mondial

Sistemul de coordonate mondiale vă permite să plasați modelul oriunde. Dacă nu faci nimic în această transformare a lumii, modelul va fi plasat la origine în același mod ca și coordonatele locale. Plasarea nu înseamnă doar să te muți de la origine, ci și să te rotești și să scalezi.

Vizualizați sistemul de coordonate

După ce ați plasat modelul în coordonatele lumii, aveți nevoie de informații despre unde vă uitați și unde vă uitați la spațiul 3D. Aceasta este ceea ce numim "transformări de vedere". Transformările de vizualizare sunt în general adesea reprezentate ca camere.

Parametrii necesari pentru această conversie sunt "poziția camerei", "punctul de interes al camerei" și "direcția în sus". Orientarea camerei este determinată de acești trei parametri. Figura de mai jos arată camera dintr-o perspectivă terță parte.

Figura de mai jos este de fapt văzută din punctul de vedere al camerei cu aranjamentul prezentat în figura de mai sus (în acest moment, nu am convertit încă coordonatele pe ecran, deci este doar o imagine).

În explicația anterioară, se pare că camera este poziționată și coordonatele sunt transformate, dar în calculul propriu-zis, coordonatele lumii sunt convertite în funcție de poziția și orientarea camerei. Prin urmare, originea este poziția camerei, așa cum se arată în figura de mai jos.

Sistem de coordonate proiective

După ce ați decis din ce poziție să vizualizați spațiul 3D, următorul pas este să procesați afișarea "obiectelor mici care sunt departe" și a "lucrurilor mari care sunt în apropiere". Aceasta se numește transformare proiectivă. Există două metode de transformare a proiecției, "proiecția în perspectivă" și "proiecția ortografică", dar imaginea de "proiecție în perspectivă" utilizată în mod obișnuit este următoarea.

Proiecția în perspectivă utilizează următorii parametri: Unghi de vizualizare, Raport de aspect, Poziție clipă înainte și Poziție clip spate. Zona etichetată "frustum" din figura de mai sus va apărea în sfârșit pe ecran.

"ViewAngle" specifică raza de vizualizare vizibilă de pe cameră. Micșorând unghiul, mărind micșorarea, mărind micșorează. Unghiul de vizualizare va fi valoarea verticală a frustului.

Raportul de aspect este utilizat pentru a determina unghiul orizontal de vizualizare, în timp ce unghiul de vizualizare este un unghi vertical. Unghiul orizontal este de obicei determinat de "unghiul de vizualizare × raportul de aspect", iar raportul de aspect este practic valoarea "lățimii ÷ înălțimea" ecranului pe care încercați să îl afișați. Dacă modificați această valoare, obiectul 3D afișat va părea că se întinde orizontal sau vertical.

Poziția clipului înainte și poziția clipului spate sunt specificate pentru a determina dacă obiectul este afișat în intervalul din față sau din spate. Datorită naturii computerului, nu este posibil să afișați până la infinit, așa că vom stabili o limită. Această valoare afectează și acuratețea Z-buffer, deci nu este recomandat să o includeți în zona de desen dincolo de intervalul care nu trebuie afișat.

Obiectul transformat în perspectivă este convertit într-un spațiu ca cel de dedesubt. Obiectele care au fost aproape de cameră sunt mărite, iar obiectele care au fost departe sunt reduse.

Acest lucru este ilustrat într-o diagramă ușor de înțeles de mai jos.

Dacă te uiți de fapt din punctul de vedere al camerei, arată ca mai jos.

O altă metodă de transformare proiectivă este proiecția ortografică, care proiectează o zonă vizibilă precum cea de mai jos. Deoarece lățimea și înălțimea sunt constante indiferent de adâncime, dimensiunea obiectului nu se modifică odată cu adâncimea.

Sistem de coordonate ecran

După transformarea proiecției, acesta este convertit în coordonatele ecranului real. Chiar dacă este un ecran, poziția și raza afișajului se modifică în funcție de setările ferestrei de vizualizare setate pe dispozitiv. Cu toate acestea, în cazul jocurilor, coordonatele clientului ferestrei sunt adesea fereastra de vizualizare așa cum este, așa că nu cred că trebuie să vă faceți griji prea mult.

Coordonatele ecranului (0, 0) sunt convertite din coordonatele de proiecție (-1, 1, z). În mod similar, coordonatele ecranului (lățime, înălțime) sunt convertite din coordonatele de proiecție (1, -1, z).