DirectX/Calcolo vettoriale: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{DirectX}} Per vettore intendiamo un oggetto che ha un modulo ed una direzione. A differenza dei vettori usati in fisica, questi non hanno un verso e non ne hanno bisogno. Un vetto...
 
Nessun oggetto della modifica
Riga 51:
 
Da notare che il prodotto vettoriale '''non''' gode della proprietà commutativa.
 
==Lavorare con i vettori in DirectX==
Un vettore generico a 3 dimensioni è definito dalla libreria Direct3D come:
<source lang="cpp">
struct D3DVECTOR
{
float x, y, z;
};
</source>
Quindi per sommare due vettori il codice sarebbe:
<source lang="cpp">
D3DVECTOR a, b;
// Riempiamo i vettori con dei dati...
// ...
 
D3DVECTOR somma;
somma.x = a.x + b.x;
somma.y = a.y + b.y;
somma.z = a.z + b.z;
</source>
Tuttavia la libreria Direct3DX viene in nostro aiuto con una fantastica classe:
<source lang="cpp">
class D3DXVECTOR3 : public D3DVECTOR
{
public:
D3DXVECTOR3();
// [...]
};
</source>
I costruttori di D3DXVECTOR3 permettono la creazione di un vettore nullo, un vettore copiato da un altro vettore e di un vettore date le tre coordinate. La grande comodità di questa classe è di supportare somma, differenza, moltiplicazione e divisione con scalari, oltre al confronto. Gestire i vettori diventa ora molto più semplice:
<source lang="cpp">
D3DXVECTOR3 v1(); // x = y = z = 0
D3DXVECTOR3 v2(3.0); // x = y = z = 3.0
D3DXVECTOR3 v3(3.0, 1.5, -4.23);
D3DXVECTOR3 v4(v2); // Copia di v2
 
v3 += v2;
v2 = v1 + v3; // Somma vettoriale
v4 = v2 * 5; // Prodotto con costante
</source>
Allo stesso modo esistono D3DXVECTOR2 e D3DXVECTOR4 (poi capiremo a cosa serve).
 
===Normalizzazione di vettori===
Abbiamo visto che normalizzare un vettore vuol dire dividere ogni componente per il modulo del vettore stesso al fine di ottenere un modulo pari ad 1. Le classi D3DXVECTOR# non contengono funzioni come ''Normalize'', ma D3DX ci fornisce una funzione per ottenere lo stesso effetto. Queste funzioni vogliono un puntatore dove mettere il risultato che poi verrà anche restituito dalla funzione stessa. Quindi questa funzione non crea un nuovo vettore ma ne richiede due: l'originale da normalizzare e la destinazione in cui riportare il risultato. E' anche possibile far coincidere pOut e pIn, perdendo però il vettore originale.
<source lang="cpp">
D3DXVECTOR2 *D3DXVec2Normalize(D3DXVECTOR2 *pOut, D3DXVECTOR2 *pIn);
D3DXVECTOR3 *D3DXVec3Normalize(D3DXVECTOR3 *pOut, D3DXVECTOR3 *pIn);
D3DXVECTOR4 *D3DXVec4Normalize(D3DXVECTOR4 *pOut, D3DXVECTOR4 *pIn);
 
D3DXVECTOR3 a(3.4, 2.6, 0.3), aNormalized;
D3DXVec3Normalize(&aNormalized, &a);
 
D3DXVECTOR2 b(-4.5, 0.99);
D3DXVec2Normalize(&b, &b);
</source>
 
[[Categoria:DirectX|Ripasso di Matematica|Calcolo vettoriale]]
{{Avanzamento|10075%|07 ottobre 2011}}