1 / 16

Geometrie in DirectX: Vektoroperationen

Geometrie in DirectX: Vektoroperationen. 29.11.2007 Kapitel 3.4.1 – 3.4.3 „Spieleprogrammierung mit DirectX und C++“ Kaiser/Lensing. 1. Trigonometrische Funktionen. sin, cos, tan... berechnen in doppelter Genauigkeit (double) sinf Sinusfunktion (float) cosf Kosinusfunktion (float)

thyra
Download Presentation

Geometrie in DirectX: Vektoroperationen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related