Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ppbg:laboratoare:04 [2024/10/31 11:50]
andrei.lambru
ppbg:laboratoare:04 [2024/11/01 00:22] (current)
andrei.lambru
Line 54: Line 54:
  
 <note tip> <note tip>
-În cuvinte, se normalizează coordonatele vârfurilor din spațiul $([-1, 1], [-1, 1], [-1, 1])$ în spațiul $([0, viewport_width], [0, viewport_height], [0,1])$.+În cuvinte, se normalizează coordonatele vârfurilor din spațiul $([-1, 1], [-1, 1], [-1, 1])$ în spațiul $([0, viewportWidth], [0, viewportHeight], [0,1])$.
 </​note>​ </​note>​
  
Line 231: Line 231:
 $$ $$
  
-Parametrii $c1$ și $c2$ sunt cei din formula originală. Problema acestei formule este că nu se imparte la valoarea $z$, ceea ce înseamna ​că pentru $z'$ nu s-ar aplica împărțirea perspectivă. Pentru a face uniform procesul de împărțire perspectivă,​ se modifică formula și obținem versiunea finală:+Parametrii $c1$ și $c2$ sunt cei din formula originală. Problema acestei formule este că nu se imparte la valoarea $z$, ceea ce înseamnă ​că pentru $z'$ nu s-ar aplica împărțirea perspectivă. Pentru a face uniform procesul de împărțire perspectivă,​ se modifică formula și obținem versiunea finală:
  
  
Line 247: Line 247:
 ===== Transformarea de vizualizare ===== ===== Transformarea de vizualizare =====
  
-Prin transformarea de proiecție perspectivă,​ descrisă mai sus, putem modifica coordonatele vârfurilor rețelei de triunghiuri pentru a le așeza în spațiul de decupare și de acolo putem desena triunghiurile pe ecran. Cu toate acestea, coordonatele obiectelor noastre nu se regăsesc întotdeauna în spațiul de vizualizare,​ reprezentat,​ cum s-a menționat mai sus, de volumul unui trunchi de piramidă cu vârful în originea axelor de coordonate și cu baza orientată de-a lungul axei Z, în sens negativ. În situația în care dorim să desenăm scena dintr-un alt punct de vedere, trebuie să definim conceptul de observator. Proprietățile care definesc un observator sunt: +Prin transformarea de proiecție perspectivă,​ descrisă mai sus, putem modifica coordonatele vârfurilor rețelei de triunghiuri pentru a le așeza în spațiul de decupare și de acolo putem desena triunghiurile pe ecran. Cu toate acestea, coordonatele obiectelor noastre nu se regăsesc întotdeauna în spațiul de vizualizare,​ reprezentat,​ cum s-a menționat mai sus, de volumul unui trunchi de piramidă cu vârful în originea axelor de coordonate și cu baza orientată de-a lungul axei $Z$, în sens negativ. În situația în care dorim să desenăm scena dintr-un alt punct de vedere, trebuie să definim conceptul de observator. Proprietățile care definesc un observator sunt: 
-  * O poziție P în spatiu, de unde "privește" ​obiectele din scenă +  * O poziție ​$Pîn spatiu, de unde privește” obiectele din scenă; 
-  * O direcție F în care "privește" ​obiectele. Companion acestei direcții, mai este necesar un vector R ce descrie direcția ​dreapta ​a observatorului,​ daca iși rotește direcția în care priveste scena cu 90 de grade față de axa OY și un vector U ce descrie direcția sus a observatorului. Cei 3 vectori sunt ortogonali, mai exact, unghiul dintre oricare 2 vectori din cei 3 este de 90 de grade.+  * O direcție ​$\vec{F}$ în care privește” obiectele. Companion acestei direcții, mai este necesar un vector ​$\vec{R}$ ce descrie direcția ​dreaptă ​a observatorului,​ daca iși rotește direcția în care priveste scena cu 90 de grade față de axa OY și un vector ​$\vec{U}$ ce descrie direcția sus a observatorului. Cei 3 vectori sunt ortogonali, mai exact, unghiul dintre oricare 2 vectori din cei 3 este de 90 de grade.
  
-Pe baza acestor informații,​ putem să creăm o transformare care modifică obiectele din scena, din spațiul în care se află, într-un spațiu în care observatorul are poziția în originea axelor de coordonate și "privește" ​scena de-a lungul axei Z, în sens negativ. Peste acest spațiu se poate suprapune volumul de vizualizare,​ utilizat pentru transformarea proiecției perspective.+Pe baza acestor informații,​ putem să creăm o transformare care modifică obiectele din scenă, din spațiul în care se află, într-un spațiu în care observatorul are poziția în originea axelor de coordonate și privește” scena de-a lungul axei $Z$, în sens negativ. Peste acest spațiu se poate suprapune volumul de vizualizare,​ utilizat pentru transformarea proiecției perspective.
  
 Transformarea de vizualizare arată în felul următor: Transformarea de vizualizare arată în felul următor:
Line 263: Line 263:
 1 1
 \end{bmatrix} = \begin{bmatrix} \end{bmatrix} = \begin{bmatrix}
-R_x R_y R_z & 0 \\ +\vec{R}_x ​\vec{R}_y ​\vec{R}_z ​& 0 \\ 
-U_x U_y U_z & 0 \\  +\vec{U}_x ​\vec{U}_y ​\vec{U}_z ​& 0 \\  
-F_x F_y F_z & 0 \\ +\vec{F}_x ​\vec{F}_y ​\vec{F}_z ​& 0 \\ 
 0 & 0 & 0 & 1 0 & 0 & 0 & 1
 \end{bmatrix} \end{bmatrix}
Line 284: Line 284:
  
  
-Se poate observa prima transformare aplicată, ultima în lanțul de înmulțiri de matrici, este o translație inversă a coordonatelor poziției observatorului în spațiul 3D, similară cu cea discutată în laboratorul anterior pentru spațiul 2D. A doua transformare aplicată este o rotație. Pentru construcția acestei matrici s-a folosit [[https://​ro.wikipedia.org/​wiki/​Procedeul_Gram%E2%80%93Schmidt | procedeul Gram–Schmidt]].+Se poate observa ​că prima transformare aplicată, ultima în lanțul de înmulțiri de matrici, este o translație inversă a coordonatelor poziției observatorului în spațiul 3D, similară cu cea discutată în laboratorul anterior pentru spațiul 2D. A doua transformare aplicată este o rotație. Pentru construcția acestei matrici s-a folosit [[https://​ro.wikipedia.org/​wiki/​Procedeul_Gram%E2%80%93Schmidt | procedeul Gram–Schmidt]].
  
 <note tip> <note tip>
-Spațiul în care se regăsesc: poziția observatorului,​ vectorii ce descriu direcția de "privire", direcția dreapta și sus, împreună cu coordonatele tuturor obiectelor ​"privite" ​de către observator, poartă numele de **spațiu al lumii**. În limba engleză, se întâlnește denumirea de **world space**.+Spațiul în care se regăsesc: poziția observatorului,​ vectorii ce descriu direcția de privire, direcția dreapta și sus, împreună cu coordonatele tuturor obiectelor ​privite” de către observator, poartă numele de **spațiu al lumii**. În limba engleză, se întâlnește denumirea de **world space**.
 </​note>​ </​note>​
  
 ===== Transformarea de modelare ===== ===== Transformarea de modelare =====
  
-Coordonatele vârfurilor din rețeaua de triunghiuri ce descrie suprafața unui obiect se declară inițial într-un spațiu convenabil creării acelui obiect. De exemplu, din laborato.+Coordonatele vârfurilor din rețeaua de triunghiuri ce descrie suprafața unui obiect se declară inițial într-un spațiu convenabil creării acelui obiect.
  
 Pentru a modifica obiectul și a-l așeza sub forma dorită în punctul final din scenă, se folosesc transformările de translație,​ de modificare a scării și de rotație, discutate în laboratorul anterior, adaptate pentru un spațiu 3D. Pentru a modifica obiectul și a-l așeza sub forma dorită în punctul final din scenă, se folosesc transformările de translație,​ de modificare a scării și de rotație, discutate în laboratorul anterior, adaptate pentru un spațiu 3D.
Line 353: Line 353:
 Mecanismul de rotație, studiat în laboratorul trecut, rotește o coordonată a unui punct într-un spațiu 2D cu un unghi a, //în sens trigonometric față de originea axelor de coordonate//​. Acest mecanism NU poate fi adaptat direct la un spațiu 3D. Mecanismul de rotație, studiat în laboratorul trecut, rotește o coordonată a unui punct într-un spațiu 2D cu un unghi a, //în sens trigonometric față de originea axelor de coordonate//​. Acest mecanism NU poate fi adaptat direct la un spațiu 3D.
  
-Astfel, transformarea de rotație dintr-un spațiu 2D este utilizată într-un spațiu 3D pentru a roti o coordonată într-un singur plan din spațiul 3D. Mai exact într-un plan paralel cu unul din cele 3 planuri ce trec prin originea axelor de coordonate. Există câte o matrice de transformare diferită pentru fiecare din cele 3 planuri. În situația în care dorim sa creăm o transformare de rotație într-un plan oarecare, trebuie să o obținem prin compunerea din mai multe transformari ​de bază.+Astfel, transformarea de rotație dintr-un spațiu 2D este utilizată într-un spațiu 3D pentru a roti o coordonată într-un singur plan din spațiul 3D. Mai exact într-un plan paralel cu unul din cele 3 planuri ce trec prin originea axelor de coordonate. Există câte o matrice de transformare diferită pentru fiecare din cele 3 planuri. În situația în care dorim sa creăm o transformare de rotație într-un plan oarecare, trebuie să o obținem prin compunerea din mai multe transformări ​de bază.
  
 Astfel, avem transformarea de rotație într-un plan paralel cu planul XOY: Astfel, avem transformarea de rotație într-un plan paralel cu planul XOY:
Line 442: Line 442:
 ===== Eliminarea din procesul de rasterizare a triunghiurilor obturate ===== ===== Eliminarea din procesul de rasterizare a triunghiurilor obturate =====
  
-O optimizare suplimentară,​ pe care o putem realiza în spațiul de decupare, pe lângă cea de decupare propriu-zisă,​ este să excludem din procesul de rasterizare triunghiurile care sunt complet obturate de altă geometrie. Pentru a nu face o procesare avansată la nivel de rețea de triunghiuri,​ putem să folosim ​urmatorul ​artificiu:+O optimizare suplimentară,​ pe care o putem realiza în spațiul de decupare, pe lângă cea de decupare propriu-zisă,​ este să excludem din procesul de rasterizare triunghiurile care sunt complet obturate de altă geometrie. Pentru a nu face o procesare avansată la nivel de rețea de triunghiuri,​ putem să folosim ​următorul ​artificiu:
  
-În situția în care desenăm un model 3D etanș, care nu conține nicio gaură în suprafața lui, avem proprietatea că din orice punct am privi geometria, nu îi vom putea vedea niciodată interiorul. Astfel, avem următoarea formă de definire a unui triunghi: pe baza descrierii cu indici din ''​vertices'',​ utilizată în laboratoarele anterioare, sensul în care sunt afișate vârfurile, pe baza ordinii din indici, ne determină ​noua faptul că privim fațeta față sau fațeta spate a triunghiului.+În situția în care desenăm un model 3D etanș, care nu conține nicio gaură în suprafața lui, avem proprietatea că din orice punct am privi geometria, nu îi vom putea vedea niciodată interiorul. Astfel, avem următoarea formă de definire a unui triunghi: pe baza descrierii cu indici din ''​vertices'',​ utilizată în laboratoarele anterioare, sensul în care sunt afișate vârfurile, pe baza ordinii din indici, ne determină ​nouă faptul că privim fațeta față sau fațeta spate a triunghiului.
  
 Mai exact, dacă avem descrisă urmatoarea geometrie: Mai exact, dacă avem descrisă urmatoarea geometrie:
Line 484: Line 484:
 {{ :​ppbg:​laboratoare:​overview.png?​600 |}} {{ :​ppbg:​laboratoare:​overview.png?​600 |}}
  
-Din spațiul obiectului, prin transformarea de modelare, ce conține un lanț de transformări de translație,​ de modificare a scării și de rotație, obiectele ajung în spațiul lumiiDin acest spațiu, prin transformarea de vizualizare,​ conform proprietăților observatorului,​ obiectele ajung în spațiul de vizualizare, peste care se aplică volumul de proiecție perspectivă,​ reprezentat de un trunchi de piramidă, centrat în originea axelor de coordonate, cu baza orientată de-a lungul axei Z, în sens negativ. Din acest spațiu, prin transformarea de proiecție perspectivă,​ obiectele ajung în spațiul de decupare, reprezentat de volumul unui cub, cu latura de dimensiune 2, centrat în originea axelor de coordonate. După procesul de decupare și de eliminare a triunghiurilor obturate, în situația în care dorim acest al doilea proces, prin transformarea coordonatelor din volumul de decupare în poarta de afișare, triunghiurile se transmit la procesul de rasterizare,​ prin care se desenează suprafețele triunghiurilor în grila de pixeli :) .+  - Din //spațiul obiectului//, prin **transformarea de modelare**, ce conține un lanț de transformări de translație,​ de modificare a scării și de rotație, obiectele ajung în //spațiul lumii//; 
 +  - Din //spațiul lumii//, prin **transformarea de vizualizare**, conform proprietăților observatorului,​ obiectele ajung în //spațiul de vizualizare//; 
 +  - Peste //spațiul de vizualizare// ​se aplică volumul de proiecție perspectivă,​ reprezentat de un trunchi de piramidă, centrat în originea axelor de coordonate, cu baza orientată de-a lungul axei Z, în sens negativ. Din acest spațiu, prin **transformarea de proiecție** perspectivă,​ obiectele ajung în //spațiul de decupare//, reprezentat de volumul unui cub, cu latura de dimensiune 2, centrat în originea axelor de coordonate. 
 +  - După procesul de decupare și de eliminare a triunghiurilor obturate, în situația în care dorim acest al doilea proces, prin transformarea coordonatelor din volumul de decupare în poarta de afișare, triunghiurile se transmit la procesul de rasterizare,​ prin care se desenează suprafețele triunghiurilor în grila de pixeli :) .
  
 <note tip> <note tip>
Line 500: Line 503:
     * După acest pas, puteți utiliza tasta **F** pentru a schimba între desenarea triunghiurilor pentru care se afișeaza fațetele față sau fațetele spate. Dacă alegeți opțiunea să fie afișate doar fațetele spate, ar trebui să puteți vedea interiorul cubului :) : {{ :​ppbg:​laboratoare:​cube2.png?​600 |}}     * După acest pas, puteți utiliza tasta **F** pentru a schimba între desenarea triunghiurilor pentru care se afișeaza fațetele față sau fațetele spate. Dacă alegeți opțiunea să fie afișate doar fațetele spate, ar trebui să puteți vedea interiorul cubului :) : {{ :​ppbg:​laboratoare:​cube2.png?​600 |}}
  
-Bonus: Construiți și desenați un tetraedru care să aibă indicii fiecărui triunghiuri orientați în sens trigonometric,​ când triunghiul este privit din exterior. Asociați culori diferite fiecărui vârf pentru vedea mai ușor detaliile tetraedrului.+Bonus: Construiți și desenați un tetraedru care să aibă indicii fiecărui triunghiuri orientați în sens trigonometric,​ când triunghiul este privit din exterior. Asociați culori diferite fiecărui vârf pentru ​vedea mai ușor detaliile tetraedrului.
  
ppbg/laboratoare/04.1730368203.txt.gz · Last modified: 2024/10/31 11:50 by andrei.lambru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0