geometrie in directx vektoroperationen n.
Skip this Video
Loading SlideShow in 5 Seconds..
Geometrie in DirectX: Vektoroperationen PowerPoint Presentation
Download Presentation
Geometrie in DirectX: Vektoroperationen

Loading in 2 Seconds...

  share
play fullscreen
1 / 16
Download Presentation

Geometrie in DirectX: Vektoroperationen - PowerPoint PPT Presentation

thyra
93 Views
Download Presentation

Geometrie in DirectX: Vektoroperationen

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

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

  2. 1. Trigonometrische Funktionen • sin, cos, tan... berechnen in doppelter Genauigkeit (double) • sinf Sinusfunktion (float) • cosf Kosinusfunktion (float) • tanf Tangensfunktion (float) • atanf Arcustangensfunktion (float) • D3DX_PI Konstante π

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

  4. 3. DirectX-Vektor typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3( ) { }; D3DXVECTOR3(const float * ); D3DXVECTOR3(const D3DVECTOR& ); D3DXVECTOR3(float x, float y, float z ); 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 += v2 v1 *= faktor v1 -= v2 v1 /= faktor

  7. typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3 operator + ( const D3DXVECTOR3& ); D3DXVECTOR3 operator - ( const D3DXVECTOR3& ); D3DXVECTOR3 operator * ( float ); D3DXVECTOR3 operator / ( float ); v1 = v2 + v3 v1 = v2 * faktor v1 = v2 - v3 v1 = 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. Zusammenfassung • Zwei neue Datentypen: • D3DXVECTOR3 ein 3D-Vektor • LPD3DXVECTOR3 Zeiger auf einen 3D-Vektor • Operationen mit Vektoren: • v1 += v2 v1 -= v2 v1 *= f v1 /= f • v1 = v2 + v3 v1 = v2 - v3 v1 = v2 * f v1 = v2 / f • v1 = f * v2 • v1 == v2 v1 != v2 • +v1 -v1 • (Array von Fließkommazahlen) v1

  11. 4) Vektorfunktionen D3DXVECTOR3* D3DXVec3Add ( pErgebnis, pSummand1, pSummand2 ) D3DXVECTOR3* D3DXVec3Subtract ( pErgebnis, pMinuend, pSubtrahend ) D3DXVECTOR3* D3DXVec3Scale ( pErgebnis, pEingabe, Skalierungsfaktor ) float D3DXVec3Dot ( pVektor1, pVektor2 ) 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. Zusammenfassung • Vektorfunktionen: • D3DXVec3Add Addition • D3DXVec3Subtract Subtraktion • D3DXVec3Scale Skalieren • D3DXVec3Dot Skalarprodukt • D3DXVec3Cross Kreuzprodukt • D3DXVec3Length Länge • D3DXVec3LengthSq Größe Längenquadrat • D3DXVec3Lerp lineare Interpolation • D3DXVec3Minimize Minima der 3 Richtungsvektoren • D3DXVec3Maximize Maxima der 3 Richtungsvektoren • D3DXVec3Normalize Normieren

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