Trigonometrische Funktionen

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
der Universität Oldenburg
3.2 Subtraktion, Multiplikation, ALU
Multiplizierer Gesucht: Schaltkreis zur Multiplikation zweier Binärzahlen , Beispiel: RW-Systemarchitektur Kap. 3.
3. 3D-Betrachtungstransformationen
Schnelle Matrizenoperationen von Christian Büttner
Vom graphischen Differenzieren
13. Transformationen mit Matrizen
11. Matrizen. 11. Matrizen Eine mn-Matrix ist ein Raster aus mn Koeffizienten, die in m Zeilen und n Spalten angeordnet sind. = (aij)1  i  m, 1.
Mechanik Mathematische Grundlagen und Begriffe: Formel? Funktion
der Universität Oldenburg
Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten.
Dreidimensionale Spielewelten
Geometrie in DirectX: Vektoroperationen Kapitel – Spieleprogrammierung mit DirectX und C++ Kaiser/Lensing.
Grundlagen der Geometrie
3.2 und 3.2.1: Räumliches Sehen und Koordinaten und Vektoren
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Indirekte Adressierung
V10 - Kollisionen Nicolas Matentzoglu. Inhalt der Präsentation Kollisionserkennung bei Hindernissen Verhalten der Kugel über verschiedenen Untergründen.
Die Geometrie der Ebene
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.
Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung
Koordinatensysteme und Transformationen
Diskrete Mathematik I Vorlesung Arrays-
Klausur „Diskrete Mathematik II“
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Bewegte Bezugssysteme
Transformationen 09-Transformationen.
DVG Klassen und Objekte
Quaternionen Eugenia Schwamberger.
Folie 1 § 30 Erste Anwendungen (30.2) Rangberechnung: Zur Rangberechnung wird man häufig die elementaren Umformungen verwenden. (30.1) Cramersche Regel:
§9 Der affine Raum – Teil 2: Geraden
Folie 1 § 29 Determinanten: Eigenschaften und Berechnung (29.1) Definition: Eine Determinantenfunktion auf K nxn ist eine Abbildung (im Falle char(K) ungleich.
Tutorium
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
§24 Affine Koordinatensysteme
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Lineare Algebra Komplizierte technologische Abläufe können übersichtlich mit Matrizen dargestellt werden. Prof. Dr. E. Larek
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
§3 Allgemeine lineare Gleichungssysteme
Polynome und schnelle Fourier-Transformation
Inhalt Weg-Zeitgesetz nach der cos- oder sin- Funktion
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 Programmiersprache C 4
Informatik 1 Letzte Übung.
Lineare Algebra, Teil 2 Abbildungen
Technische Informatik Reihungen – Felder - Arrays.
Dynamische Datentypen
Drehung im Raum – Kreiseltheorie
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
§22 Invertierbare Matrizen und Äquivalenz von Matrizen
Scaffold 29S: Komplexe Zahlen
Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung
Vom graphischen Differenzieren
Übersicht Nachtrag zu Ausdrücken
THE MATHEMATICS OF PARTICLES & THE LAWS OF MOTION.
Diskrete Mathematik I Vorlesung 2 Arrays.
Grundlagen der Geometrie
6. Thema: Arbeiten mit Feldern
Graphische Datenverarbeitung
Tutorium Software-Engineering SS14 Florian Manghofer.
Pflichtteil 2016 Aufgabe 6: Gegeben ist die Gerade
Das Vektorprodukt Wir definieren erneut eine Multiplikation zwischen zwei Vektoren, das Vektorprodukt, nicht zu verwechseln mit dem Skalarprodukt. Schreibe.
 Präsentation transkript:

Trigonometrische Funktionen Runtime - Library - Funktionen sin oder cos auf Berechnung von double ausgelegt Einfache Genauigkeit float durch funktionale gleichwertige Funktionen sinf, cosf, tanf, atanf Konstante π wird durch D3DX_PI repräsentiert

Vektoren In C: 3D - Vektor als struct mit drei Koordinatenwerten x, y, z: typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; -> Koordinaten eines Vektor v über v.x, v.y, v.z ansprechbar In c++: verschiedene Konstruktoren und überladene Operatoren

typedef struct D3DXVECTOR3: public D3DVECTOR { public: D3DXVECTOR3 () {}; // erzeugt uninitialisierten Vektor D3DXVECTOR3 ( CONST FLOAT *); /* initialisiert Vektor aus Array von Gleitkommazahlen */ D3DXVECTOR3 (CONST D3DVECTOR& ); /* Copy - Konstruktor: Vektor aus Vektor */ D3DXVECTOR3 ( FLOAT x, FLOAT y, FLOAT z); /* Initialisierung mit 3 Einzelwerten */ operator FLOAT* (); /*Vektor auf Array von Gleitkommazahlen casten*/ operator CONST FLOAT* () const; /* damit jede Koordinate über Index ansprechbar */ D3DXVECTOR3& operator += (CONST D3DXVECTOR3&); //Addition Vektoren v+= w */ D3DXVECTOR3& operator -= (CONST D3DXVECTOR3&);// Subtraktion D3DXVECTOR3& operator *= (FLOAT);/* Multiplikation Vektor v *= s (Skalar)*/ D3DXVECTOR3& operator /= (FLOAT);/* Division Vektor v /= s (Skalar)*/

D3DXVECTOR3 operator + () const; // Vorzeichen +v D3DXVECTOR3 operator + (CONST D3DXVECTOR3&) const; // Addition zweier Vektoren u = v + w D3DXVECTOR3 operator - (CONST D3DXVECTOR3&) const; // Subtraktion zweier Vektoren u = v - w D3DXVECTOR3 operator * (FLOAT) const; // u = v*s (Skalar) D3DXVECTOR3 operator / (FLOAT) const; // u = v/s (Skalar) friend D3DXVECTOR3 operator * (FLOAT, CONST struct D3DXVECTOR3&); // u = s (Skalar) * v BOOL operator == (CONST D3DXVECTOR3& ) const; // Test auf Gleichheit zweier Vektoren u == v BOOL operator != (CONST D3DXVECTOR3& ) const; // Test auf Ungleichheit u!=v } D3DXVECTOR3, // ist ein 3D - Vektor *LPD3DXVECTOR3; // ist ein Zeiger auf einen 3D - Vektor

Vektorfunktionen -> Addition von zwei Vektoren D3DXVECTOR3* D3DXVec3Add (D3DVECTOR3* pOut, CONST D3DVECTOR3* pV1, CONST D3DVECTOR3* pV2) ( Zeiger auf Ergebnisvektor, ersten Summanden, zweiten Summanden ) *pOut wird als Funktionsergebnis über return zurück gegeben Alternativ: Out = V1 + V2 -> Subtraktion ist in Parametersignatur identisch D3DXVECTOR3* D3DXVec3Subtract ( Zeiger auf Ergebnisvektor, erster Operand, zweiter Operand )

-> Skalieren, dh Multiplizieren des Vektors mit einer Zahl D3DXVECTOR3* D3DXVec3Scale (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV, FLOAT s) ( Zeiger auf Ergebnisvektor, skalierenden Vektor, Skalierungsfaktor) alternativ: Out = s * V -> Skalarprodukt von Vektoren FLOAT D3DXVec3Dot (CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2) (Erster Eingabevektor, zweiter Eingabevektor) -> Länge eines Vektors FLOAT D3DXVec3Length (CONST D3DXVECTOR3* pV) (Zeiger auf Vektor, dessen Länge gesucht)

-> Längenvergleiche zwischen Vektoren Längenquadrate der Vektoren berechnen ist effizienter, da kein Wurzel ziehen FLOAT D3DXVecLengthSq (CONST D3DXVECTOR3* pV) (Vektor, dessen Längenquadrat gesucht) -> Vektorkreuzprodukt zwei Vektoren: a x b D3DXVECTOR3* D3DXVecCross (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2) (Ergebnis, erster Operand, zweiter Operand) -> lineare Interpolation Out= (1-s)V1 + V2 D3DXVECTOR3* D3DXVec3Lerp (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2, FLOAT s) (Ergebnis, erster Operand, zweiter Operand, Interpolationsfaktor)

-> jeweils kleinste x, y, z - Koordinatenwerte zweier Vektoren zu neuem Vektor zusammen fassen, Minimum der beiden Eingabewerte D3DXVECTOR3* D3DXVec3Minimize (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2) (Ergebnisvektor, erster Operand, zweiter Operand) -> Maximum äquivalent berechnen D3DXVECTOR3* D3DXVec3Maximize (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2) -> normalisierter Vektor gleiche Richtung wie Ursprungsvektor, aber Länge 1 Berechnung: Division durch seine Länge D3DXVECTOR3* D3DXVec3Normalize (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV) (Ergebnisvektor, Eingabevektor)

Matrizen 4 x 4 Matrizen - zunächst wieder einfache C Datenstruktur typedef struct _D3DMATRIX { union // Union, in der zwei Interpretationen der Matrix struct { float _11, _12, _13, _14; //als einzeln benannte Felder float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; }; float m [4][4];// als zweidimensionaler Array // übereinander gelegt sind -> Felder von Matrix mat // können direkt mat._32 oder über Index mat.m [3][2] }; // angesprochen werden } D3DMATRIX;

typedef struct D3DMXMATRIX : public D3DMATRIX { Public: D3DXMATRIX () {}; // ohne Initialwerte D3DXMATRIX (CONST FLOAT *); // über Array von Werten D3DXMATRIX (CONST D3DXMATRIX&); // über andere Matrix D3DXMATRIX (FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14, FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24, FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34, FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44,); // Initialisierung über Einzelwerte FLOAT& operator () (UINT Row, UINT Col); FLOAT operator () (UINT Row, UINT Col) const; // Überladen Operator () -> Zugriff auf Felder der // Matrix mat über mat (3,2) // im ersten Fall sind Werte durch Referenz veränderbar

operator FLOAT* (); // Cast Operatoren operator CONST FLOAT* () const;// Matrix als Array D3DXMATRIX& operator *= (CONST D3DXMATRIX& ); //Multiplikation zweier Matrizen m*=n D3DXMATRIX& operator += (CONST D3DXMATRIX& ); // Addition zweier Matrizen m+=n D3DXMATRIX& operator -= (CONST D3DXMATRIX& ); // Subtraktion zweier Matrizen m-=n D3DXMATRIX& operator *= (FLOAT); // Multiplikation Matrix m *=s (Skalar) D3DXMATRIX& operator /= (FLOAT); // Division einer Matrix durch Skalar m/=s D3DXMATRIX operator + () const; // Vorzeichen +m D3DXMATRIX operator - () const; // Vorzeichen -m

D3DXMATRIX operator * (CONST D3DXMATRIX&) const; //Multiplikation zweier Matrizen m = n1 *n2 D3DXMATRIX operator + (CONST D3DXMATRIX&) const; // Addition zweier Matrizen m = n1+ n2 D3DXMATRIX operator - (CONST D3DXMATRIX&) const; // Subtraktion zweier Matrizen m = n1 - n2 D3DXMATRIX operator * (FLOAT) const; // Multiplikation Matrix * Skalar m = n*s D3DXMATRIX operator / (FLOAT) const; // Division Matrix / Skalar m = n/s friend D3DXMATRIX operator * (FLOAT, CONST D3DXMATRIX&); // Multiplikation Skalar, Matrix m = s*n BOOL operator == (CONST D3DXMATRIX&) const; // Test auf Gleichheit zweier Matrizen m == n BOOL operator != (CONST D3DXMATRIX&) const; // Test auf Ungleichheit m!=n } D3DXMATRIX, // Datentyp: eine 4x4 Matrix *LPD3DXMATRIX; // Datentyp: Zeiger auf 4x4 Matrix

Matrizenfunktionen -> Einheitsmatrix erzeugen - häufig als Initialwert verwendet, macht gar nichts wenn auf Vektor / Matrix D3DXMATRIX* D3DXMatrixIdentity (D3DXMATRIX* pOut) (Zeiger auf Ergebnismatrix wird über return zurück gegeben) -> Berechnung der Umkehrmatrix manche Matrixoperationen lassen sich rückgängig machen, so etwa die Drehung, z.B. Drehung um die z-Achse Allgemeine Matrix zur Drehung um z-Achse sowie für deren umgekehrte Drehung ergibt Einheitsmatrix -> M * M-1 = E D3DXMATRIX* D3DXMatrixInverse (D3DXMATRIX* pOut, FLOAT* pDeterminant, CONST D3DXMATRIX*pM) (Zeiger auf Ergebnismatrix, berechnende Determinante, invertierende Matrix) wenn nicht invertierbar: Rückgabewert 0 Determinante: wenn ungleich 0, ist die Matrix invertierbar

-> Multiplikation, Produkt zweier Matrizen D3DXMATRIX* D3DXMatrixMultiply (D3DXMATRIX*pOut, CONST D3DXMATRIX* pM1, CONST D3DXMATRIX* pM2) (Zeiger auf Ergebnismatrix, erste, zweite Eingabematrix) pOut wird zurück gegeben -> Rotationen um eine der drei Koordinatenachsen D3DXMATRIX* D3DXMatrixRotationX (D3DXMATRIX*pOut, FLOAT Angle) D3DXMATRIX* D3DXMatrixRotationY (D3DXMATRIX*pOut, FLOAT Angle) D3DXMATRIX* D3DXMatrixRotationZ (D3DXMATRIX*pOut, FLOAT Angle) (Ergebnismatrix, Rotationswinkel) Vektor gegen den Uhrzeigersinn in bestimmtem Winkel Beliebige Achse: D3DXMATRIX* D3DXMatrixRotationAxis (D3DXMATRIX*pOut, CONST D3DXVECTOR3* pV, FLOAT Angle) - Vektor angeben, der Drehachse bilden soll

-> Matrix, die Vektoren um Winkel in alle drei Koordinatenrichtungen kippt Yaw: Rechts - Links - Drehen Pitch: Auf - Ab Roll: Rechts - Links - Neigen D3DXMATRIX* D3DXMatrixRotationYawPitchRoll (D3DXMATRIX* pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll) -> Matrix in x,y,z Richtung skalieren D3DXMATRIX* D3DXMatrixScaling (D3DXMATRIX* pOut, FLOAT sx, FLOAT sy, FLOAT sz) (Ergebnis, Skalierungsfaktor in x,y,z - Richtung) -> Translation oder Verschiebung D3DXMATRIX* D3DXMatrixTranslation (D3DXMATRIX* pOut, FLOAT x, FLOAT y, FLOAT z) (Ergebnis, Verschiebung in x,y,z - Richtung)

-> Erzeugung von Projektionsmatrizen Matrix für orthogonale Projektion in z-Richtung in einem linkshändischen Koordinatensystem D3DXMATRIX* D3DXMatrixOrthoLH (D3DXMATRIX* pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf) (Zeiger auf Ergebnismatrix, Breite des Sichtfensters, Höhe des Sichtfensters, Abstand zur nahen Begrenzungsebene, Abstand zur fernen Begrenzungsebene) -> perspektivische Projektion D3DXMATRIX* D3DXMatrixPerspectiveLH (D3DXMATRIX* pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf) (Ergebnismatrix, Breite des Sichtfensters, Höhe des Sichtfensters, Abstand zur nahen Begrenzungsebene, Abstand zur fernen Begrenzungsebene) -> für eine perspektivische Projektion über Ansichtsverhältnis und Blickwinkel D3DXMATRIX* D3DXMatrixPerspectiveFovLH (D3DXMATRIX* pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf) (Ergebnismatrix, Blickfeldwinkel, Ansichtsverhältnis, Abstand zur nahen Begrenzungsebene, Abstand zur fernen Begrenzungsebene)

-> Szene aus bestimmter Position betrachten, damit ist bestimmte Bewegung im Raum verbunden D3DXMATRIX* D3DXMatrixLookAtLH (D3DXMATRIX* pOut, CONST D3DXVECTOR3* pEye, CONST D3DXVECTOR3* pAt, CONST D3DXVECTOR3* pUp) (Zeiger auf Ergebnismatrix, Standpunkt Betrachter, Blickpunkt Betrachter, Richtungsvektor, der angibt, wo für Betrachter „oben“ ist)

Vektor - Matrizenfunktionen Multiplizieren eines Vektors mit einer Matrix: D3DXVec3TransformNormal D3DCVec3TransformCoord beide Funktionen ermöglichen Multiplikation eines dreidimensionalen Vektors mit 4x4 Matrix Wir wollen mit 3D Vektoren arbeiten, müssen aber aus technischen Gründen mit in der vierten Koordinate mit 1 ergänzten 4D Vektoren arbeiten

D3DXVec3TransformNormal Matrix wird durch Ignorieren der vierten Spalte und vierten Zeile zurecht geschnitten Dann Multiplikation des 3D - Eingabevektors mit Matrix D3DXVECTOR3* D3DXVec3TransformNormal ( D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV, CONST D3DXMATRIX* pM) (Zeiger auf Ergebnisvektor, multiplizierenden Vektor, Matrix) Ergebnis ist nur bei Dreh- oder Skalierungsmatrix korrekt, Verschiebung: ein Verschiebevektor wird in letzter Zeile und Spalte ignoriert

fehlende vierte Koordinate des Vektors wird mit 1 ergänzt D3DXVECTOR3* D3DXVec3TransformCoord (D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV, CONST D3DXMATRIX* pM) ( Zeiger auf Ergebnisvektor, auf den zu multiplizierenden Vektor, auf Matrix) fehlende vierte Koordinate des Vektors wird mit 1 ergänzt Eignet sich für Verschiebung Multiplikation mit kompletter 4x4 Matrix Dann Rückskalierung: die ersten drei Koordinaten werden durch den Wert der vierten Koordinate dividiert Bei Drehungen, Skalierungen, Translationen hat Rückskalierung keinen Effekt -> auch hier korrekte Ergebnisse Vierte Koordinate nach Multiplikation ignoriert Ergebnis: 3D Vektor

Modellierung dreidimensionaler Objekte Statt Punktwolke in 3D Szenarien: digitales Drahtgitter, auch genannt Mesh Besteht aus Vielzahl von Eck- und Knotenpunkten (Vertices) Ein Vertex ist ein Vektor mit x, y, z - Koordinate Zusätzlich: Angabe der Punkte, die zusammen eine Fläche bilden -> Aufstellung aller Flächen bzw Faces Fläche hat immer Vorderseite und Rückseite und wird durch Aufzählung ihrer Eckpunkte im Uhrzeigersinn bei Blick auf Vorderseite beschrieben Folien zum „Bekleben“: Texturen in bmp oder jpg Format -> Information über Klebepunkte Für jeden Eckpunkt muss man festlegen, welche Stelle der Textur an ihm anzukleben ist Textur wird entsprechend gestreckt oder gestaucht -> Textur Mapping

Material: Textur mit Materialeigenschaften In DirectX: Mesh als Datenstruktur Dateiformat für Meshes: x-Format .x Erstellung über 3D Modeller