Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Belakane Dull Geändert vor über 11 Jahren
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) 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
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.