Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Geometrie in DirectX: Vektoroperationen 29.11.2007 Kapitel 3.4.1 – 3.4.3 Spieleprogrammierung mit DirectX und C++ Kaiser/Lensing.

Ähnliche Präsentationen


Präsentation zum Thema: "Geometrie in DirectX: Vektoroperationen 29.11.2007 Kapitel 3.4.1 – 3.4.3 Spieleprogrammierung mit DirectX und C++ Kaiser/Lensing."—  Präsentation transkript:

1 Geometrie in DirectX: Vektoroperationen Kapitel – Spieleprogrammierung mit DirectX und C++ Kaiser/Lensing

2 1. Trigonometrische Funktionen sin, cos, tan... berechnen in doppelter Genauigkeit (double) sinfSinusfunktion (float) cosfKosinusfunktion (float) tanfTangensfunktion (float) atanfArcustangensfunktion (float) D3DX_PIKonstante π

3 typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; 2. Einfacher Vektor Objekt D3DVECTOR nimmt diese Struktur an z x y

4 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3( ){ }; D3DXVECTOR3(const float * ); D3DXVECTOR3(const D3DVECTOR& ); D3DXVECTOR3(float x, float y, float z ); 3. DirectX-Vektor 4 Varianten, die Struktur zu erzeugen (uninitialisiert, aus einem Array von Gleitkommazahlen, als Kopie aus einem anderen Vektor, aus drei einzelnen Gleitkommazahlen)

5 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: operator FLOAT* ( ); operator CONST FLOAT* ( ) const; erlauben einen Cast Vektor -> Array von Gleitkommazahlen sinnvoll z. B. wenn die einzelnen Werte per Schleife / Index ausgelesen werden sollen

6 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3& operator += ( const D3DXVECTOR3& ); D3DXVECTOR3& operator -= ( const D3DXVECTOR3& ); D3DXVECTOR3& operator *= ( float ); D3DXVECTOR3& operator /= ( float ); Operator overloading: v1 += v2v1 *= faktor v1 -= v2v1 /= faktor

7 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3 operator + ( const D3DXVECTOR3& ); D3DXVECTOR3 operator - ( const D3DXVECTOR3& ); D3DXVECTOR3 operator * ( float ); D3DXVECTOR3 operator / ( float ); v1 = v2 + v3v1 = v2 * faktor v1 = v2 - v3v1 = v2 / faktor

8 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3 operator + ( ) const; D3DXVECTOR3 operator - ( ) const; friend D3DXVECTOR3 operator * (float, const struct D3DXVECTOR3& ); Vorzeichen des Vektors positiv setzen +v1 Vorzeichen umkehren -v1 v1 = faktor * v2

9 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: BOOL operator == (const D3DXVECTOR3& ) const; BOOL operator != (const D3DXVECTOR3& ) const; } D3DXVECTOR3, *LPD3DXVECTOR3; Test auf Gleichheit / Ungleichheit: v1 == v2, v1 != v2 Objekt D3DXVECTOR 3 nimmt diese Struktur an, Objekt LPD3DXVECTOR 3 ist ein Zeiger auf diese Struktur

10 Zwei neue Datentypen: –D3DXVECTOR3ein 3D-Vektor –LPD3DXVECTOR3Zeiger auf einen 3D-Vektor Zusammenfassung Operationen mit Vektoren: v1 += v2v1 -= v2v1 *= fv1 /= f v1 = v2 + v3v1 = v2 - v3v1 = v2 * fv1 = v2 / f v1 = f * v2 v1 == v2v1 != v2 +v1-v1 (Array von Fließkommazahlen) v1

11 D3DXVECTOR3* D3DXVec3Add ( pErgebnis, pSummand1, pSummand2 ) D3DXVECTOR3* D3DXVec3Subtract ( pErgebnis, pMinuend, pSubtrahend ) D3DXVECTOR3* D3DXVec3Scale ( pErgebnis, pEingabe, Skalierungsfaktor ) float D3DXVec3Dot ( pVektor1, pVektor2 ) 4) Vektorfunktionen Funktionen synonym zu: v_ergebnis = v1 + v2 v_ergebnis = v1 - v2 v_ergebnis = v1 * f Skalarprodukt

12 float D3DXVec3Length ( pVektor ) float D3DXVec3LengthSq ( pVektor ) - Rückgabe der Länge des Vektors - Rückgabe der Größe des Längenquadrates über dem Vektor zum Vergleichen der Länge von Vektoren ist Möglichkeit 2 viel schneller, da Wurzelziehen entfällt

13 D3DXVECTOR3* D3DXVec3Cross ( pErgebnis, pVektor1, pVektor2 ) D3DXVECTOR3* D3DXVec3Lerp ( pErgebnis, pVektor1, pVektor2, Interpolationsfaktor ) - Kreuzprodukt zweier Vektoren - lineare Interpolation zwischen zwei Vektoren zwischen 0 und 1

14 D3DXVECTOR3* D3DXVec3Minimize ( pErgebnis, pVektor1, pVektor2 ) D3DXVECTOR3* D3DXVec3Maximize ( pErgebnis, pVektor1, pVektor2 ) D3DXVECTOR3* D3DXVec3Normalize ( pErgebnis, pEingabe ) - Minimum der jeweiligen x- / y- / z-Werte kombiniert in neuen Vektor schreiben - Maximum... - einen Vektor normalisieren (selbe Richtung wie alter Vektor, aber Länge = 1)

15 Vektorfunktionen: –D3DXVec3AddAddition –D3DXVec3SubtractSubtraktion –D3DXVec3ScaleSkalieren –D3DXVec3DotSkalarprodukt –D3DXVec3CrossKreuzprodukt –D3DXVec3LengthLänge –D3DXVec3LengthSqGröße Längenquadrat –D3DXVec3Lerplineare Interpolation –D3DXVec3MinimizeMinima der 3 Richtungsvektoren –D3DXVec3MaximizeMaxima der 3 Richtungsvektoren –D3DXVec3NormalizeNormieren Zusammenfassung

16 auf der CD zum Buch, :\Demos\Vektor.exe Demoprogramm


Herunterladen ppt "Geometrie in DirectX: Vektoroperationen 29.11.2007 Kapitel 3.4.1 – 3.4.3 Spieleprogrammierung mit DirectX und C++ Kaiser/Lensing."

Ähnliche Präsentationen


Google-Anzeigen