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

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Trigonometrische Funktionen
Kollisionen beschreiben Tag 6
3.2 und 3.2.1: Räumliches Sehen und Koordinaten und Vektoren
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
V10 - Kollisionen Nicolas Matentzoglu. Inhalt der Präsentation Kollisionserkennung bei Hindernissen Verhalten der Kugel über verschiedenen Untergründen.
Positionierung und Ausrichtung der Kamera. void balance::kamera_bewegen( float seit, float hoch, float vor) { D3DXVECTOR3 v, s, h, t; v = da_gucke_ich_hin.
Geometrie. Geometrie 6. Ebene Geometrie Ein Punkt ist, was keinen Teil hat. Euklid ( ) Gerade analytisch: y = mx + c y(0) = c y(1)
Diskrete Mathematik I Vorlesung Arrays-
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Bewegung auf der Kreisbahn: Die Zentripetalbeschleunigung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Dynamische Datentypen
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
BMEVIEEA100 Grundlagen der Programmierung
Scaffold 29S: Komplexe Zahlen
Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Übersicht Nachtrag zu Ausdrücken
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
2  = 360° 1° =  /180 6 Ebene Geometrie (S. 45ff) 180°
Diskrete Mathematik I Vorlesung 2 Arrays.
Grundlagen der Geometrie
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
8. Vektoren. 8. Vektoren Ortsvektor oder Polarvektor.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Stichwortverzeichnis
3. Schafft das Internet neue Transaktionsdesign?
R What is this R thing, and is it worth some effort?
8 Zündung/Motormanagement
Kapitel 4 Traveling Salesman Problem (TSP)
Einführung in die Wahrscheinlichkeitsrechnung
Motoremissionen mobiler Anlagen – Stand der Technik
Inhaltsverzeichnis In der vorliegenden Präsentation finden Sie unter anderem Antworten auf folgende Fragen… warum ist eine Gesetzesinitiative zum Betriebliches.
Algorithmen und Datenstrukturen
Rehwild die richtige Altersbestimmung
Betriebliche Gesundheitsförderung 2
Vorlesung Wasserwirtschaft & Hydrologie I
Eröffnungsveranstaltung
Einführung in die Benutzung des Einkaufportals der Eckelmann AG
Non-Standard-Datenbanken
Menger-Schwamm Ausgangsfigur in Stufe 0 ist ein Würfel
VO Aktuelle Forschung in der Biomechanik Ziel:
Standorte, Verflechtungen und regionale Disparitäten VO 5
Produktionsfaktoren 1 Ökonomische Handlungsprinzipen
Generative Posenschätzung
Genau lesen - Wortaufbau Spezial-App für Igel-Fans
Retraite KIS August 2016 Meisterschwanden Dr. med. Stefan Roth
Ostern in Deutschland.
Body-Mass-Index (BMI)
Micro Vertex Detector of PANDA Strip Detector
 Präsentation transkript:

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

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

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

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)

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

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

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

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

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

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

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

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

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

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)

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

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