Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz

  • View
    103

  • Download
    1

Embed Size (px)

Transcript

  • Folie 1
  • Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz
  • Folie 2
  • Was ist 3D Grafik? Vektoren Matrizen Aufbau Direct3D Zustndigkeitsbereich Schnittstellen Ebenen Farbgebung
  • Folie 3
  • Zweidimensionales kartesisches Koordinatensystem
  • Folie 4
  • Dreidimensionales kartesisches Koordinatensystem
  • Folie 5
  • Darstellung dreidimensionaler Objekte Abbildung auf dem Bildschirm durch Projektion Bildtiefe wird vermittelt Einsatz von Polygongrafik Verbindung von Bildpunkten zu mehreren Dreiecken Annhrung an den perfekten Krper Durchschnittliche Grenordnung zur Annhrung liegt bei 10.000 Polygonen
  • Folie 6
  • Vektoren Positionsvektoren Koordinaten eines Punktes Richtungsvektor Gibt Bewegungsrichtung an In Kombination mit der Geschwindigkeit auch Bewegungsvektoren genannt Vektorkomponenten vom Blickwinkel des Betrachters abhngig
  • Folie 7
  • Rechenoperationen Grundrechenarten zur Bewegung, Verlngerung oder Stauchung Punktprodukt / Skalarprodukt Bestimmt Kosinus eines Winkel zwischen zwei Richtungsvektoren Kreuzprodukt Steht senkrecht auf den Vektoren aus denen es gebildet wurde
  • Folie 8
  • Rechenoperationen Lnge eines Vektors / Distanz zwischen zwei Punkten Berechnung durch Satz des Pythagoras Normalisierte Vektoren (Richtungsvektoren) Lnge 1 pure Richtungsangabe Bewegungsvektor wird durch seine Lnge geteilt Verhindert unerwartete Werte Wichtig bei Berechnung des Punktprodukts
  • Folie 9
  • Implementierte Klasse : tbVector3 TBVECTOR3.H Deklaration und Inline-Methoden TBVECTOR3.CPP Definition / Implementierung Variablen Drei float Variablen fr die Komponenten x, y, z Programmierung einer Vektorklasse
  • Folie 10
  • Konstruktoren Standardkonstruktor Kopierkonstruktor Erwartet Referenz auf ein anderes tbVector3-Objekt Kopiert den angegeben Vektor Konstruktor Setzt Vektorkomponenten ein
  • Folie 11
  • Operatoren Arithmetische Operatoren lassen sich komponentenweise durchfhren Bsp: inline tbVector3 operator * (const tbVector3& a, const tbVector3& b) { return tbVector3(a.x * b.x, a.y * b.y, a.z * b.z); }
  • Folie 12
  • Operatoren Zuweisungsoperatoren Werden innerhalb der Klasse definiert Vergleichsoperatoren berprfung zur Gleichheit bzw. Ungleichheit zweier Vektoren
  • Folie 13
  • D3DVECTOR Struktur zur Darstellung von Vektoren Wird von Direct3D verwendet Identisch mit tbVector3 Verbindung zur tbVector3 Klasse durch Casting operator D3DVECTOR& () { return *((D3DVECTOR*)(this)); } 3D Spieleprogrammierung Seite 56
  • Folie 14
  • Hilfsfunktionen Vektorlnge und Quadrat der Vektorlnge tbVector3Length tbVector3LengthSq inline float tbVector3Length(const tbVector3& v) { return sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); }
  • Folie 15
  • Hilfsfunktionen Normalisieren eines Vektors tbVector3Normalize Teilt Vektor durch seine Lnge inline tbVector3NormalizeEX(const tbVector3& v) { return v / (sqrtf(v.x * v.x + v.y * v.y + v.z * v.z) + 0.0001f); } Wenn man nicht sicher ist ob der Vektor die Lnge null hat, erreicht man durch Addition eines Kontrollwerts sicheres Normalisieren
  • Folie 16
  • Hilfsfunktionen Das Kreuzprodukt tbVector3Cross inline tbVector3 tbVectorCross(const tbVector3& a, const tbVector3& b) { return tbVector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); }
  • Folie 17
  • Hilfsfunktionen Punktprodukt tbVector3Dot (berechnet lediglich Punktprodukt) Seite 59 tbVector3Angle rechnet Kosinuswert zustzlich um inline float tbVector3Angle(const tbVector3& a, const tbVector3& b) { return acosf((a.x * b.x + a.y * b.y + a.z * b.z) / //Punktprodukt sqrtf((a.x * a.x + a.y * a.y + a.z * a.z) * //Vektorlnge (b.x * b.x + b.y * b.y + b.z * b.z))); } Man erhlt Kosinuswert des Winkels Durch ArcusFunktion
  • Folie 18
  • Hilfsfunktionen Minimum- und Maximumvektoren Geben Minimum- bzw. Maximumvektor mehrerer Vektoren an tbVector3Min bzw. tbVector3Max Zufallsvektoren Liefert zuflligen normalisierten Vektor tbVector3Random Funktion fr die Richtung : tbFloatRandom Einsatz fr Explosionen, Rauch, etc.
  • Folie 19
  • Hilfsfunktionen Lineare Interpolation Positionsbestimmung eines Objekts zu einer gewissen Zeit Start- und Zielpunkt sind bekannt tbVector3InterpolateCoords Seite 61 Interpoliert man Normalenvektoren ist das Ergebnis nicht gleichzeitig auch ein Normalenvektor tbVector3InterpolateNormale (Interpoliert und normalisiert) tbVector3InterpolateNormalizeEx (Interpoliert, normalisiert und prft ob Vektor die Lnge null hat)
  • Folie 20
  • Hilfsfunktionen inline tbVector3 tbVector3InterpolateNormal(const tbVector3& a, const tbVector3& b, const float s) { return tbVector3NormalizeEx(a + s * (b a)); }
  • Folie 21
  • Hilfsfunktionen Zur berprfung ist es hilfreich, wenn man Vektoren ins Logbuch schreibt tbWriteVector3ToLog bersicht der Hilfsfunktionen fr Vektoren und Beispielcode auf Seite 63 Fr die Arbeit mit 2D-Vektoren gibt es die Klasse tbVector2 mit 2D Funktion hnlich zu den gerade kennengelernten
  • Folie 22
  • Matrizen Matrix = rechteckige Anordnung von Zahlen Verschiedene Menge Zeilen und Spalten Identittsmatrix Verkrpert das neutrale Element
  • Folie 23
  • Rechenoperationen
  • Folie 24
  • Multiplikation von Matrizen Spaltenanzahl von Matrize A muss mit Zeilenanzahl von Matrize B identisch sein
  • Folie 25
  • Matrizen dividieren Division durch Multiplikation mit dem Kehrwert Kehrwert ist das inverse Element bei einer Matrix muss es die Identittsmatrix ergeben Invertierte Matrix bringt man durch Exponenten -1 zum Ausdruck
  • Folie 26
  • Transformationen Verschiebung Rotation Skalierung Man betrachtet Vektoren als Matrix mit Zeilen und Spalten Man geht von absoluten Koordinaten mit dem Objektmittelpunkt (0, 0, 0) aus
  • Folie 27
  • Transformationsmatrix Transformationsmatrix verwendet 4 Spalten und 4 Zeilen Verbleibende Zeile fllt man mit einer 1 (w Koordinate) Resultierende w Koordinate muss 1 sein. Ist dies nicht der Fall teilt man alle Komponenten durch sie
  • Folie 28
  • Transformationen Translationsmatrix Verschiebt einen Vektor Simple Vektoraddition X p = x m *C 11 + y m *C 21 + z m *C 31 + C 41 Matrixelement C 41 fliet nur durch Addition ein Bei Y p C 42 und bei Zp C 43 Fllt man diese Elemente (innerhalb einer Identittsmatrix) aus, wird eine Translation durchgefhrt
  • Folie 29
  • Transformation Skalierungsmatrix Skalierung bedeutet Multiplikation eines Vektors Man nutzt die Identittsmatrix X o = x*S x + y*0 + z*0 + 0 Es finden lediglich Multiplikationen der einzelnen Komponenten statt
  • Folie 30
  • Transformationen Rotationsmatrizen Gleichung zur Drehung eines Punktes um den Koordinatenursprung: x = (x * cos ) + (y * (- sin )) y = (x * sin ) + (y * cos ) Dieses Verfahren kann man auf die Rechnung mit der Matrix anwenden Es muss beachtet werden, welche Komponenten angesprochen werden
  • Folie 31
  • Folie 32
  • Transformationen von Richtungsvektoren Knnen nicht verschoben werden (haben keine Position, beschreiben lediglich eine Richtung) Bei einer Transformation mssen die m und n Werte vertauscht werden (transformierte invertierte Transformationsmatrix)
  • Folie 33
  • Transformationen Man kann innerhalb einer Matrix mehrere Funktionen (Translation, Skalierung, Rotation) vieler Matrizen vereinen Reihenfolge ist wichtig Skalierung Rotation Translation
  • Folie 34
  • Matrix als Koordinatensystem Um eine Matrix zu erhalten die einen Punkt in ein anderes Koordinatensystem umrechnet, muss eine Translation um den Ursprung stattfinden Um Koordinatensystemmatrix zu erhalten muss man Rotationsmatrix mit Translationsmatrix multiplizieren
  • Folie 35
  • Projektionsmatrix Projektion eines dreidimensionalen Vektors auf eine Ebene (Bildschirm) Dreiecke die vor oder hinter einer gewissen Ebene (nahe und ferne Clipping-Ebene) werden nicht mehr dargestellt Entfernung der Clipping Ebene Blickfeld des Betrachters Seitenverhltnisse des Bildes
  • Folie 36
  • Projektionsmatrix Projektionsmatrize bestimmt das Sichtfeld des Betrachters
  • Folie 37
  • Sichtfelder Clipping Ebenen
  • Folie 38
  • Kameramatrix Virtueller Beobachter lsst sich in 3D Szene einfgen Position und Ausrichtung muss bekannt sein - Blickpunkt der Kamera Nach-oben-Vektor Kamerabewegung Dreht man Kamera nach links werden Objektvektoren nach rechts bewegt Man wendet Kameramatrix vor Projektions- und nach Transformationsmatrizen an beinhaltet eigenes Koordinatensystem
  • Folie 39
  • Implementierung Variablen der Klasse tbMatrix 16 float Variablen (m 11 bis m 44 ) Konstruktoren Standardkonstruktor Kopierkonstruktor mit Referenz auf eine andere Matrix. Kopiert die angegebene Matrix Konstruktor der die Werte der float-Parameter in die Matrix hineinkopiert
  • Folie 40
  • Operatoren Addition und Subtraktion sind identisch zur Vektorklasse Divisionsoperator invertiert rechte Matrix und multipliziert linke damit tbMa

Recommended

View more >