Sunteți pe pagina 1din 34

Rodica Baciu

Programarea aplicațiilor multimedia cu


DirectX
Cap.2 - Matematica pentru grafica 3D

ISBN: 978-606-616-084-1
Sistem de coordonate 2D

Rodica Baciu Programarea aplicațiilor 2


multimedia cu DirectX
Primitive 2D

Line Line strip Triangle

Triangle strip Triangle fan


Rodica Baciu Programarea aplicațiilor 3
multimedia cu DirectX
Transformări geometrice 2D
Translaţia

Inainte de translaţie După translaţie

Rodica Baciu Programarea aplicațiilor 4


multimedia cu DirectX
Transformări geometrice 2D
Rotaţia

Rodica Baciu Programarea aplicațiilor 5


multimedia cu DirectX
Transformări geometrice 2D
Scalarea

Rodica Baciu Programarea aplicațiilor 6


multimedia cu DirectX
Vectori
Norma unui vector

[in] Pointer spre vectorul sursă (structură


D3DXVECTOR3).

|Vector| = sqrt ( (Vector.x * Vector.x) + (Vector.y * Vector.y) )

Rodica Baciu Programarea aplicațiilor 7


multimedia cu DirectX
Vectori
Adunarea vectorilor
[in,out] Pointer spre vectorul destinaţie
(structură D3DXVECTOR3) care este
rezultatul operaţiei

[in] Pointer spre vectorul sursă (structură


D3DXVECTOR3).

Rodica Baciu Programarea aplicațiilor 8


multimedia cu DirectX
Vectori
Scăderea vectorilor

Rodica Baciu Programarea aplicațiilor 9


multimedia cu DirectX
Vectori
Multiplicarea vectorilor cu un scalar

Se efectuează operaţia de scalare, dar pentru


structuri 3D

Exemplu pentru 2D

Rodica Baciu Programarea aplicațiilor 10


multimedia cu DirectX
Vectori
Normalizarea
Funcţia Direct3D D3DXVec3Normalize

D3DXVECTOR3 *WINAPI D3DXVec3Normalize


(
[in,out] Pointer spre vectorul
D3DXVECTOR3 *pOut, destinaţie (structură D3DXVECTOR3)
CONST D3DXVECTOR3 *pV care este rezultatul operaţiei
);
[in] Pointer spre vectorul sursă
(structură D3DXVECTOR3).

După operaţia de normalizare norma vectorului


devine 1.

Rodica Baciu Programarea aplicațiilor 11


multimedia cu DirectX
Vectori
Produsul scalar a doi vectori

[in] adresa vectorului A

[in] adresa vectorului B

[out] A•B
Rodica Baciu Programarea aplicațiilor 12
multimedia cu DirectX
Vectori
Unghiul dintre doi vectori
• Produs scalar>0, unghi ascuțit
• Produs scalar=0, unghi de 900
• Produs scalar<0, unghi obtuz

Exemplu: Calcularea unghiului dintre doi vectori

Rodica Baciu Programarea aplicațiilor 13


multimedia cu DirectX
Vectori
Produsul vectorial a doi vectori

[in, out] Pointer la o structură


D3DXVECTOR3 care este rezultatul
operaţiei

[in] Pointer la o structură


D3DXVECTOR3

Rodica Baciu Programarea aplicațiilor 14


multimedia cu DirectX
Matrici
Componentele matricei

D3DXMATRIX Matrix;
Matrix._11 = 4.0f;
Matrix._31= 5.0f;
Matrix._43 = 1.0f;

Rodica Baciu Programarea aplicațiilor 15


multimedia cu DirectX
Matrici
Adunarea matricelor

Rodica Baciu Programarea aplicațiilor 16


multimedia cu DirectX
Matrici
Scăderea matricelor

Rodica Baciu Programarea aplicațiilor 17


multimedia cu DirectX
Matrici
Înmulţirea matricelor cu un scalar

Rodica Baciu Programarea aplicațiilor 18


multimedia cu DirectX
Matrici
Înmulţirea a două matrice

[in, out] Pointer la o structură D3DXMATRIX


care este rezultatul operaţiei

[in] Pointer la o structură D3DXMATRIX

Rodica Baciu Programarea aplicațiilor 19


multimedia cu DirectX
Matrici
Matricea identitate

[in, out] Pointer la o structură D3DXMATRIX


care este rezultatul operaţiei

Rodica Baciu Programarea aplicațiilor 20


multimedia cu DirectX
Determinantul unei matrice și matricea inversă

[in, out] Pointer la o structură D3DXMATRIX


care este rezultatul operaţiei

[in, out] setaţi acest parametru la NULL

[in] Pointer la o structură sursă D3DXMATRIX

Rodica Baciu Programarea aplicațiilor 21


multimedia cu DirectX
Matrici pentru transformări geometrice –
Matricea de translaţie

[in, out] Pointer la o structură D3DXMATRIX


care este rezultatul operaţiei

[in] deplasarea pe x

[in] deplasarea pe y

[in] deplasarea pe z

Rodica Baciu Programarea aplicațiilor 22


multimedia cu DirectX
Matrici pentru transformări geometrice –
Matricea de rotaţie
1 0 0 0  cos(α ) 0 sin(α ) 0
0 cos(α ) sin(α ) 0  0
  1 0
0 − sin(α ) cos(α ) 0 − sin(α ) cos(α ) 0
   
0 0 0 1  0 0 0 1

Rotaţia pe x  cos(α ) sin(α ) 0 0 Rotaţia pe y


− sin(α ) cos(α ) 0 0

 0 0 1 0
  Rotaţia pe z
 0 0 0 1
Rodica Baciu Programarea aplicațiilor 23
multimedia cu DirectX
Radiani? Grade?
Conversia din grade în radiani

Conversia din radiani în grade

OBS: D3DX_PI este o constantă Direct3D pentru PI

Rodica Baciu Programarea aplicațiilor 24


multimedia cu DirectX
Matrici pentru transformări geometrice –
Matricea de rotaţie
[in, out] Pointer la o structură D3DXMATRIX
care este rezultatul operaţiei (matricea de
rotatie fata de axa X)

matricea de rotatie fata de axa Y [in] unghiul de rotaţie in radiani

matricea de rotatie fata de axa Z


EXEMPLU

Rodica Baciu Programarea aplicațiilor 25


multimedia cu DirectX
Matrici pentru transformări geometrice –
Rotaţia față de o axă oarecare

[in, out] Pointer la o structură D3DXMATRIX


care este rezultatul operaţiei

[in] axa de rotaţie exprimată ca un vector

[in] unghiul de rotaţie. Unghiurile sunt exprimate în


radiani. Unghiuri pozitive se consideră cele in sens
trigonometric când se priveşte de-a lungul axei înspre
origine (CCW)

Rodica Baciu Programarea aplicațiilor 26


multimedia cu DirectX
Matrici pentru transformări geometrice –
Matricea de scalare

[in, out] Pointer la o structură D3DXMATRIX


care este rezultatul operaţiei

[in] Factorii de scalare pe cele 3 axe

EXEMPLU

Rodica Baciu Programarea aplicațiilor 27


multimedia cu DirectX
Matrici pentru transformări geometrice –
Concatenarea matricilor
Pentru aceasta se realizează operaţia de înmulţire a matricilor
utilizând:
•metoda D3DXMatrixMultiply
•operatorul de înmulţire

EXEMPLU

Rodica Baciu Programarea aplicațiilor 28


multimedia cu DirectX
Planul
Structura Direct3D pentru plan

Coeficienţii planului din ecuaţia planului

Ax + By + Cz – D = 0

Rodica Baciu Programarea aplicațiilor 29


multimedia cu DirectX
Planul
Crearea planului din 3 puncte
[in, out] Pointer la o structură D3DXPLANE
care este rezultatul operaţiei

[in] Pointer la o structură D3DXVECTOR


EXEMPLU definind unul dintre cele trei puncte care
definesc planul

Rodica Baciu Programarea aplicațiilor 30


multimedia cu DirectX
Planul
Crearea planului dintr-un punct şi o normală

[in, out] Pointer la o structură D3DXPLANE


care este rezultatul operaţiei

[in] Pointer la o structură


[in] Pointer la o structură D3DXVECTOR D3DXVECTOR definind un punct
definind normala la plan de pe plan
EXEMPLU

Rodica Baciu Programarea aplicațiilor 31


multimedia cu DirectX
Planul - Clasificarea punctelor în spaţiul
3D faţă de un plan
[in] Pointer la o structură D3DXPLANE
care reprezintă planul faţă de care se face
clasificarea

[in] Pointer la o structură D3DXVECTOR


definind un punct în spaţiul 3D

EXEMPLU

Rodica Baciu Programarea aplicațiilor 32


multimedia cu DirectX
Observație
• Defapt funcția dă unghiul
dintre normala la plan si
vectorul format de originea • P1 (în fața planului)
normalei și punctul care ne
intereseaza.
unghiul este <90,
N
cos >0
• P2 (oriunde pe plan)
P1 unghiul este =90, cos
=0
• P3 (în spatele
P3 P2 planului) unghiul este
>90, cos <0

Rodica Baciu Programarea aplicațiilor 33


multimedia cu DirectX
Planul – Intersecţia dintre un plan şi o dreaptă

[in, out] Pointer la o structură D3DXVECTOR


care reprezintă punctul de intersecţie
[in] Pointer la o structură D3DXPLANE care
reprezintă planul

[in] Pointer la o structură D3DXVECTOR


EXEMPLU definind un punctele care delimitează linia

OBS:
Dacă dreapta este
paralelă cu planul
rezultatul este NULL

Rodica Baciu Programarea aplicațiilor 34


multimedia cu DirectX

S-ar putea să vă placă și