This shows you the differences between two versions of the page.
egc:laboratoare:05 [2023/11/08 21:51] andrei.lambru |
egc:laboratoare:05 [2024/11/05 12:26] (current) andrei.lambru |
||
---|---|---|---|
Line 3: | Line 3: | ||
**Autor**: [[florineugen.iancu@gmail.com | Florin Iancu]] | **Autor**: [[florineugen.iancu@gmail.com | Florin Iancu]] | ||
- | ===== Spațiul Obiect ===== | + | ===== Spațiul obiectului ===== |
- | Spațiul obiect mai este denumit și **SPAȚIUL COORDONATELOR LOCALE**. | + | Spațiul obiectului mai este denumit și **SPAȚIUL COORDONATELOR LOCALE**. |
Pentru a putea lucra mai eficient și a reutiliza obiectele 3D definite, în general, fiecare obiect este definit într-un sistem de coordonate propriu. Obiectele simple sau procedurale pot fi definite direct din cod însă majoritatea obiectelor utilizate în aplicațiile 3D sunt specificate în cadrul unui program de modelare precum **3D Studio Max**, **Maya**, **Blender** etc. Definind independent fiecare obiect 3D, putem să îi aplicăm o serie de transformări de rotație, scalare și translație pentru a reda obiectul în scena 3D. Un obiect încărcat poate fi afișat de mai multe ori prin utilizarea unor **//matrici de modelare//**, câte una pentru fiecare instanță a obiectului inițial, ce mențin transformările 3D aplicate acestor instanțe. | Pentru a putea lucra mai eficient și a reutiliza obiectele 3D definite, în general, fiecare obiect este definit într-un sistem de coordonate propriu. Obiectele simple sau procedurale pot fi definite direct din cod însă majoritatea obiectelor utilizate în aplicațiile 3D sunt specificate în cadrul unui program de modelare precum **3D Studio Max**, **Maya**, **Blender** etc. Definind independent fiecare obiect 3D, putem să îi aplicăm o serie de transformări de rotație, scalare și translație pentru a reda obiectul în scena 3D. Un obiect încărcat poate fi afișat de mai multe ori prin utilizarea unor **//matrici de modelare//**, câte una pentru fiecare instanță a obiectului inițial, ce mențin transformările 3D aplicate acestor instanțe. | ||
Line 12: | Line 12: | ||
- | ===== Spațiul Lume ===== | + | ===== Spațiul lumii ===== |
- | Transformarea din spațiul obiect în spațiul lume sau **SPAȚIUL COORDONATELOR GLOBALE** se numește transformare de modelare. Despre forma ei matriceală, cunoscută sub numele de **//matrice de modelare//**, s-a discutat mai sus. Matricea se obține printr-o serie de **rotații**, **scalări** și **translații**. Prin înmulțirea fiecărui vertex al unui obiect (mesh 3D) cu această matrice, obiectul va fi mutat din spațiul local în spațiul lume, adică se face trecerea de la coordonate locale la coordonate globale. | + | Transformarea din spațiul obiectului în spațiul lumii sau **SPAȚIUL COORDONATELOR GLOBALE** se numește transformare de modelare. Despre forma ei matriceală, cunoscută sub numele de **//matrice de modelare//**, s-a discutat mai sus. Matricea se obține printr-o serie de **rotații**, **scalări** și **translații**. Prin înmulțirea fiecărui vertex al unui obiect (mesh 3D) cu această matrice, obiectul va fi mutat din spațiul local în spațiul lumii, adică se face trecerea de la coordonate locale la coordonate globale. |
Folosind matrici de modelare diferite putem amplasa un obiect în scenă de mai multe ori, în locații diferite, cu rotație și scalare diferită dacă este necesar. Un exemplu este prezentat în scena de mai jos. | Folosind matrici de modelare diferite putem amplasa un obiect în scenă de mai multe ori, în locații diferite, cu rotație și scalare diferită dacă este necesar. Un exemplu este prezentat în scena de mai jos. | ||
Line 20: | Line 20: | ||
{{ :egc:laboratoare:lab05:use_model_matrix.png?500 | World Space }} | {{ :egc:laboratoare:lab05:use_model_matrix.png?500 | World Space }} | ||
- | ===== Spațiul de Vizualizare ===== | + | ===== Spațiul de vizualizare ===== |
- | Transformarea din spațiul lume în spațiul de vizualizare sau **SPAȚIUL CAMEREI** este cunoscută sub numele de transformare de vizualizare. | + | Transformarea din spațiul lumii în spațiul de vizualizare sau **SPAȚIUL CAMEREI** este cunoscută sub numele de transformare de vizualizare. |
<hidden> | <hidden> | ||
Line 28: | Line 28: | ||
</hidden> | </hidden> | ||
- | Matricea de modelare poziționează obiectele în scenă, în spațiul lume. Dar o scenă poate fi vizualizată din mai multe puncte de vedere. Pentru aceasta există transformarea de vizualizare. | + | Matricea de modelare poziționează obiectele în scenă, în spațiul lumii. Dar o scenă poate fi vizualizată din mai multe puncte de vedere. Pentru aceasta există transformarea de vizualizare. |
- | Dacă într-o scenă avem mai multe obiecte, fiecare obiect are o matrice de modelare diferită (care l-a mutat din spațiul obiect în spațiul lume), însă toate obiectele au aceeași matrice de vizualizare. Transformarea de vizualizare este definită pentru întreaga scenă. | + | Dacă într-o scenă avem mai multe obiecte, fiecare obiect are o matrice de modelare diferită (care l-a mutat din spațiul obiectului în spațiul lume), însă toate obiectele au aceeași matrice de vizualizare. Transformarea de vizualizare este definită pentru întreaga scenă. |
{{ :egc:laboratoare:lab05:word_view_space.png | World Space and View Space}} | {{ :egc:laboratoare:lab05:word_view_space.png | World Space and View Space}} | ||
- | În spațiul lume camera poate să fie considerată ca un obiect având cele 3 axe locale OX, OY, OZ (vezi poza). Matricea de vizualizare se poate calcula folosind funcția ''glm::lookAt''. | + | În spațiul lumii, camera poate să fie considerată ca un obiect având cele 3 axe locale OX, OY, OZ (vezi poza). Matricea de vizualizare se poate calcula folosind funcția ''glm::lookAt''. |
<code cpp> | <code cpp> | ||
Line 53: | Line 53: | ||
Vectorul "up" se proiectează în planul de vizualizare, cu direcția de proiecție paralelă cu normala la planul de vizualizare. Proiecția acestuia dă direcția axei verticale a planului de vizualizare. | Vectorul "up" se proiectează în planul de vizualizare, cu direcția de proiecție paralelă cu normala la planul de vizualizare. Proiecția acestuia dă direcția axei verticale a planului de vizualizare. | ||
- | În spațiul lume camera poate fi considerată un simplu obiect 3D asupra căruia aplicăm transformările de rotație și translație. Dacă în spațiul lume, camera poate fi poziționată oriunde și poate avea orice orientare, în spațiul de vizualizare (spațiul observator) camera este întotdeauna poziționată în (0,0,0) și privește în direcția OZ negativă. | + | În spațiul lumii camera poate fi considerată un simplu obiect 3D asupra căruia aplicăm transformările de rotație și translație. Dacă în spațiul lumii, camera poate fi poziționată oriunde și poate avea orice orientare, în spațiul de vizualizare (spațiul observator) camera este întotdeauna poziționată în (0,0,0) și privește în direcția OZ negativă. |
Matricea de vizualizare conține transformări de rotație și translație, la fel ca și matricea de modelare. De aceea, dacă ținem scena pe loc și mutăm camera, sau dacă ținem camera pe loc și rotim/translatăm scena, obținem același efect: | Matricea de vizualizare conține transformări de rotație și translație, la fel ca și matricea de modelare. De aceea, dacă ținem scena pe loc și mutăm camera, sau dacă ținem camera pe loc și rotim/translatăm scena, obținem același efect: | ||
Line 78: | Line 78: | ||
Din spațiul de proiecție este foarte ușor matematic să obținem proiecția finală 2D pe viewport fiind nevoie doar să mapăm informația din cubul [-1,1] scalată corespunzător pe viewport-ul definit de aplicație. | Din spațiul de proiecție este foarte ușor matematic să obținem proiecția finală 2D pe viewport fiind nevoie doar să mapăm informația din cubul [-1,1] scalată corespunzător pe viewport-ul definit de aplicație. | ||
- | ==== Matricea de Proiecție ==== | + | ==== Matricea de proiecție ==== |
Trecerea din spațiul de vizualizare în spațiul de proiecție se face tot utilizând o matrice, denumită **matrice de proiecție**, calculată în funcție de tipul de proiecție definit. Biblioteca **GLM** oferă funcții de calcul pentru cele mai utilizate 2 metode de proiecție în aplicațiile 3D, anume: proiecția **perspectivă** și **ortografică** | Trecerea din spațiul de vizualizare în spațiul de proiecție se face tot utilizând o matrice, denumită **matrice de proiecție**, calculată în funcție de tipul de proiecție definit. Biblioteca **GLM** oferă funcții de calcul pentru cele mai utilizate 2 metode de proiecție în aplicațiile 3D, anume: proiecția **perspectivă** și **ortografică** | ||
Line 84: | Line 84: | ||
Datele (vertecșii din spațiul de vizualizare) sunt înmulțite cu **matricea de proiecție** pentru a se obține pozițiile corespunzătoare din spațiul de proiecție. | Datele (vertecșii din spațiul de vizualizare) sunt înmulțite cu **matricea de proiecție** pentru a se obține pozițiile corespunzătoare din spațiul de proiecție. | ||
- | ==== Proiecția Ortografică ==== | + | ==== Proiecția ortografică ==== |
În proiecția ortografică observatorul este plasat la infinit. Distanța până la geometrie nu influențează proiecția și deci nu se poate determina vizibil din proiecție. Proiecția ortografică păstrează paralelismul liniilor din scenă. | În proiecția ortografică observatorul este plasat la infinit. Distanța până la geometrie nu influențează proiecția și deci nu se poate determina vizibil din proiecție. Proiecția ortografică păstrează paralelismul liniilor din scenă. | ||
Line 100: | Line 100: | ||
</code> | </code> | ||
- | ==== Proiecția Perspectivă ==== | + | ==== Proiecția perspectivă ==== |
Proiecția perspectivă este reprezentată de un trunchi de piramidă (frustum) definit prin cele 2 planuri, **cel din apropiere** și **cel din depărtare**, cât și de deschiderea unghiurilor de vizualizare pe cele 2 axe, OX și OY. În proiecția perspectivă distanța până la un punct din volumul de vizualizare influențează proiecția. | Proiecția perspectivă este reprezentată de un trunchi de piramidă (frustum) definit prin cele 2 planuri, **cel din apropiere** și **cel din depărtare**, cât și de deschiderea unghiurilor de vizualizare pe cele 2 axe, OX și OY. În proiecția perspectivă distanța până la un punct din volumul de vizualizare influențează proiecția. | ||
Line 121: | Line 121: | ||
Volum de vizualizare perspectivă (**stânga**) și rezultatul obținut (**dreapta**) în urma aplicării transformării de proiecție asupra geometriei din scenă | Volum de vizualizare perspectivă (**stânga**) și rezultatul obținut (**dreapta**) în urma aplicării transformării de proiecție asupra geometriei din scenă | ||
- | ===== Spațiul Coordonatelor de Dispozitiv Normalizate (NDC) ===== | + | ===== Spațiul coordonatelor de dispozitiv normalizate (NDC) ===== |
După aplicarea transformărilor de **Modelare**, **Vizualizare** și **Proiecție** iar apoi **divizarea cu W** a vectorilor, se obține spațiul de coordonate normalizate (**NDC**) reprezentat de un CUB centrat în origine (0, 0, 0) cu latura 2. Informația din acest cub se poate proiecta foarte ușor pe orice suprafață 2D de desenare definită de utilizator. | După aplicarea transformărilor de **Modelare**, **Vizualizare** și **Proiecție** iar apoi **divizarea cu W** a vectorilor, se obține spațiul de coordonate normalizate (**NDC**) reprezentat de un CUB centrat în origine (0, 0, 0) cu latura 2. Informația din acest cub se poate proiecta foarte ușor pe orice suprafață 2D de desenare definită de utilizator. |