Differences

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

Link to this comparison view

egc:laboratoare:04 [2024/10/27 18:22]
mihnea.mitrache [Rotația]
egc:laboratoare:04 [2024/10/27 19:21] (current)
mihnea.mitrache [Transformări 3D]
Line 110: Line 110:
 Acesta este un sistem de coordonate regulat dreapta. Axa x este orientată spre dreapta, axa y este orientată în sus, iar axa z este orientată spre privitor. Acesta este un sistem de coordonate regulat dreapta. Axa x este orientată spre dreapta, axa y este orientată în sus, iar axa z este orientată spre privitor.
 </​note>​ </​note>​
-{{:​egc:​laboratoare:​lab4sistemcoordonate.png}} +{{ :​egc:​laboratoare:​lab4sistemcoordonate0.png?500 |}}
  
 Vom implementa diferite tipuri de transformări ce pot fi aplicate obiectelor: translații,​ rotații și scalări. Similar cu cazul 2D, vom utiliza coordonate omogene pentru a realiza aceste transformări. Diferența este dată de faptul că putem deplasa obiectele într-o dimensiune suplimentară,​ adică pe axa z. Astfel, vom adăuga o coloană și o linie în matricele de transformare,​ astfel încât acestea vor fi de 4x4. Vom implementa diferite tipuri de transformări ce pot fi aplicate obiectelor: translații,​ rotații și scalări. Similar cu cazul 2D, vom utiliza coordonate omogene pentru a realiza aceste transformări. Diferența este dată de faptul că putem deplasa obiectele într-o dimensiune suplimentară,​ adică pe axa z. Astfel, vom adăuga o coloană și o linie în matricele de transformare,​ astfel încât acestea vor fi de 4x4.
Line 169: Line 168:
   - translatarea rezultatului a.î. punctul față de care s-a făcut scalarea să ajungă în poziția sa inițială   - translatarea rezultatului a.î. punctul față de care s-a făcut scalarea să ajungă în poziția sa inițială
  
-==== Scalarea ​====+==== Rotația ​==== 
 +Spre deosebire de celelalte două operații de mai sus, rotația este puțin mai interesantă când trecem la 3D. Putem să rotim un obiect în jurul uneia dintre cele trei axe cât și jurul unei axe oarecare. 
 +<note tip> 
 +În 2D am realizat rotații față de origine sau față de un punct oarecare. Înțelegem acum că rotația aceea era în jurul axei Z, perpendiculară pe planul de lucru. 
 +</​note>​ 
 +{{:​egc:​laboratoare:​lab4rotation2d_gif.gif}} 
 + 
 +Pentru rotațiile în jurul axelor de coordonate ne putem imagina că realizăm rotația prin "​înșurubarea"​ în jurul acestora. 
 + 
 +{{:​egc:​laboratoare:​lab4rotation3d_gif.gif|}} 
 + 
 +=== Rotația față de axa OX ===
  
-=== Scalarea față de origine === 
 $$ $$
 \begin{bmatrix} \begin{bmatrix}
 {x}'​\\ ​ {x}'​\\ ​
-{y}'\\+{y}'​\\ ​
 {z}'​\\ ​ {z}'​\\ ​
 1 1
 \end{bmatrix} = \begin{bmatrix} \end{bmatrix} = \begin{bmatrix}
-s_x & 0 & 0 &0 \\  +& 0 & 0 & 0 \\ 
-0 & s_y &0 \\  +0 & cos(u) ​-sin(u) ​& 0 \\  
-0 & s_z &0 \\ +0 & sin(u) ​cos(u) ​& 0 \\  
-0 & 0 & 0 &​1 ​+0 & 0 & 0 & 1
 \end{bmatrix} \end{bmatrix}
  
Line 193: Line 202:
 $$ $$
  
-Dacă $sx = sy = sz$ atunci avem scalare uniformă, altfel avem scalare neuniformă. 
  
-=== Scalarea ​față de un punct oarecare ​===+=== Rotația ​față de axa OY ===
  
-Scalarea ​relativă la un punct oarecare ​se rezolvă în cel mai simplu mod prin: +$$ 
-  - translatarea atât a punctului asupra căruia se aplică ​scalarea ​cât și a punctului ​față de care se face scalarea ​a.î. cel din urmă să fie originea sistemului de coordonate +\begin{bmatrix} 
-  - scalarea ​normală (față de origine+{x}'\\  
-  - translatarea rezultatului a.î. punctul ​față de care s-a făcut ​scalarea ​să ajungă în poziția sa inițială+{y}'\\  
 +{z}'\\  
 +
 +\end{bmatrix} = \begin{bmatrix} 
 +cos(u) & 0 & sin(u) & 0\\  
 +0 & 1 & 0 & 0 \\ 
 +-sin(u) & 0 & cos(u) & 0\\  
 +0 & 0 & 0 & 1 
 +\end{bmatrix} 
 + 
 +\begin{bmatrix} 
 +x\\  
 +y\\  
 +z\\  
 +
 +\end{bmatrix}  
 +$$ 
 + 
 + 
 +=== Rotația față de axa OZ === 
 + 
 +$$ 
 +\begin{bmatrix} 
 +{x}'\\  
 +{y}'\\  
 +{z}'\\  
 +
 +\end{bmatrix} = \begin{bmatrix} 
 +cos(u) & -sin(u) & 0 & 0\\  
 +sin(u) & cos(u) & 0 & 0\\  
 +0 & 0 & 1 & 0 \\ 
 +0 & 0 & 0 & 1 
 +\end{bmatrix} 
 + 
 +\begin{bmatrix} 
 +x\\  
 +y\\  
 +z\\  
 +
 +\end{bmatrix}  
 +$$ 
 + 
 +=== Rotația față de o axă paralelă cu axa OX === 
 + 
 +Rotația ​relativă la o axă paralelă cu axa OX se rezolvă în cel mai simplu mod prin: 
 +  - translatarea atât a punctului asupra căruia se aplică ​rotația ​cât și a punctului ​în jurul căruia se face rotația ​a.î. cel din urmă să se afle pe axa OX 
 +  - rotația ​normală (în jurul axei OX
 +  - translatarea rezultatului a.î. punctul ​în jurul căruia s-a făcut ​rotația ​să ajungă în poziția sa inițială 
 + 
 +Similar se procedeaza și pentru axele paralele cu OY și OZ. 
 + 
 +La curs veți învăța cum puteți realiza rotații față de axe oarecare (care nu sunt paralele cu OX, OY sau OZ).
  
 ===== Utilizarea bibliotecii GLM ===== ===== Utilizarea bibliotecii GLM =====
egc/laboratoare/04.1730046179.txt.gz · Last modified: 2024/10/27 18:22 by mihnea.mitrache
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