![Page 1: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/1.jpg)
Softwaretechnologie II (Teil 1):Simulation und 3D ProgrammierungManfred ThallerWS 2012/2013
3D-Grafik: Mathe
Linda Scholz
![Page 2: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/2.jpg)
Was ist 3D Grafik?
Vektoren Matrizen Aufbau Direct3D – Zuständigkeitsbereich
Schnittstellen Ebenen Farbgebung
![Page 3: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/3.jpg)
Zweidimensionales kartesisches Koordinatensystem
![Page 4: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/4.jpg)
Dreidimensionales kartesisches Koordinatensystem
![Page 5: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/5.jpg)
Darstellung dreidimensionaler Objekte
Abbildung auf dem Bildschirmdurch Projektion Bildtiefe wird vermittelt
Einsatz von Polygongrafik Verbindung von Bildpunkten zu
mehreren Dreiecken Annährung an den „perfekten“ Körper Durchschnittliche Größenordnung zur Annährung
liegt bei 10.000 Polygonen
![Page 6: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/6.jpg)
Vektoren
Positionsvektoren Koordinaten eines Punktes
Richtungsvektor Gibt Bewegungsrichtung an In Kombination mit der Geschwindigkeit auch
Bewegungsvektoren genannt Vektorkomponenten vom Blickwinkel des
Betrachters abhängig
![Page 7: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/7.jpg)
Rechenoperationen
Grundrechenarten zur Bewegung, Verlängerung oder Stauchung
Punktprodukt / Skalarprodukt Bestimmt Kosinus eines Winkel zwischen zwei
Richtungsvektoren Kreuzprodukt
Steht senkrecht auf den Vektoren aus denen es gebildet wurde
![Page 8: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/8.jpg)
Rechenoperationen
Länge eines Vektors / Distanz zwischen zwei Punkten Berechnung durch Satz des Pythagoras
Normalisierte Vektoren (Richtungsvektoren) Länge 1 – pure Richtungsangabe Bewegungsvektor wird durch seine Länge geteilt Verhindert unerwartete Werte Wichtig bei Berechnung des Punktprodukts
![Page 9: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/9.jpg)
Implementierte Klasse : tbVector3 TBVECTOR3.H
Deklaration und Inline-Methoden TBVECTOR3.CPP
Definition / Implementierung Variablen
Drei float Variablen für die Komponenten x, y, z
Programmierung einer Vektorklasse
![Page 10: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/10.jpg)
Konstruktoren
Standardkonstruktor Kopierkonstruktor
Erwartet Referenz auf ein anderes tbVector3-Objekt Kopiert den angegeben Vektor
Konstruktor Setzt Vektorkomponenten ein
![Page 11: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/11.jpg)
Operatoren
Arithmetische Operatoren lassen sich komponentenweise durchführen
Bsp:
inline tbVector3 operator * (const tbVector3& a,
const tbVector3& b)
{
return tbVector3(a.x * b.x, a.y * b.y, a.z * b.z);
}
![Page 12: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/12.jpg)
Operatoren
Zuweisungsoperatoren Werden innerhalb der Klasse definiert
Vergleichsoperatoren Überprüfung zur Gleichheit bzw. Ungleichheit
zweier Vektoren
![Page 13: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/13.jpg)
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
![Page 14: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/14.jpg)
Hilfsfunktionen
Vektorlänge und Quadrat der Vektorlänge tbVector3Length tbVector3LengthSq
inline float tbVector3Length(const tbVector3& v)
{
return sqrtf(v.x * v.x + v.y * v.y + v.z * v.z);
}
![Page 15: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/15.jpg)
Hilfsfunktionen
Normalisieren eines Vektors tbVector3Normalize Teilt Vektor durch seine Länge
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 Länge null hat, erreicht man durch Addition eines Kontrollwerts „sicheres“ Normalisieren
![Page 16: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/16.jpg)
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);
}
![Page 17: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/17.jpg)
Hilfsfunktionen
Punktprodukt tbVector3Dot (berechnet lediglich Punktprodukt) Seite 59
tbVector3Angle rechnet Kosinuswert zusätzlich 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) * //Vektorlänge
(b.x * b.x + b.y * b.y + b.z * b.z)));
}
Man erhält Kosinuswert des Winkels
Durch ArcusFunktion
![Page 18: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/18.jpg)
Hilfsfunktionen
Minimum- und Maximumvektoren Geben Minimum- bzw. Maximumvektor mehrerer
Vektoren an tbVector3Min bzw. tbVector3Max
Zufallsvektoren Liefert zufälligen normalisierten Vektor tbVector3Random Funktion für die Richtung : tbFloatRandom Einsatz für Explosionen, Rauch, etc.
![Page 19: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/19.jpg)
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 prüft ob Vektor die Länge null hat)
![Page 20: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/20.jpg)
Hilfsfunktionen
inline tbVector3 tbVector3InterpolateNormal(const tbVector3& a,
const tbVector3& b,
const float s)
{
return tbVector3NormalizeEx(a + s * (b – a));
}
![Page 21: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/21.jpg)
Hilfsfunktionen
Zur Überprüfung ist es hilfreich, wenn man Vektoren ins Logbuch schreibt tbWriteVector3ToLog
Übersicht der Hilfsfunktionen für Vektoren und Beispielcode auf Seite 63
Für die Arbeit mit 2D-Vektoren gibt es die Klasse tbVector2 mit 2D Funktion ähnlich zu den gerade kennengelernten
![Page 22: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/22.jpg)
Matrizen
Matrix = rechteckige Anordnung von Zahlen
Verschiedene Menge Zeilen und Spalten
IdentitätsmatrixVerkörpert das neutrale Element
![Page 23: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/23.jpg)
Rechenoperationen
![Page 24: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/24.jpg)
Multiplikation von Matrizen
Spaltenanzahlvon Matrize Amuss mit Zeilenanzahlvon Matrize Bidentisch sein
![Page 25: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/25.jpg)
Matrizen dividieren
Division durch Multiplikation mit dem Kehrwert Kehrwert ist das inverse Element – bei einer
Matrix muss es die Identitätsmatrix ergeben Invertierte Matrix bringt man durch Exponenten
-1 zum Ausdruck
![Page 26: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/26.jpg)
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
![Page 27: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/27.jpg)
Transformationsmatrix
Transformationsmatrix verwendet 4 Spalten und 4 Zeilen
Verbleibende Zeilefüllt man mit einer 1 (w Koordinate)
Resultierende w Koordinate muss 1 sein. Ist dies nicht der Fall teilt man alle Komponenten durch sie
![Page 28: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/28.jpg)
Transformationen
Translationsmatrix Verschiebt einen Vektor Simple Vektoraddition
Xp = xm*C11 + ym*C21 + zm*C31 + C41
Matrixelement C41 fließt „nur“ durch Addition ein Bei Yp C42 und bei Zp C43 Füllt man diese Elemente (innerhalb einer
Identitätsmatrix) aus, wird eine Translation durchgeführt
![Page 29: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/29.jpg)
Transformation
Skalierungsmatrix Skalierung bedeutet Multiplikation eines Vektors Man nutzt die Identitätsmatrix Xo = x*Sx + y*0 + z*0 + 0 Es finden lediglich Multiplikationen der
einzelnen Komponenten statt
![Page 30: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/30.jpg)
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
![Page 31: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/31.jpg)
![Page 32: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/32.jpg)
Transformationen von Richtungsvektoren
Können nicht verschoben werden (haben keine Position, beschreiben lediglich eine Richtung)
Bei einer Transformation müssen die m und n Werte vertauscht werden (transformierte invertierte Transformationsmatrix)
![Page 33: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/33.jpg)
Transformationen
Man kann innerhalb einer Matrix mehrere Funktionen (Translation, Skalierung, Rotation) vieler Matrizen vereinen
Reihenfolge ist wichtig Skalierung Rotation Translation
![Page 34: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/34.jpg)
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
![Page 35: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/35.jpg)
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 Seitenverhältnisse des Bildes
![Page 36: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/36.jpg)
Projektionsmatrix
Projektionsmatrize bestimmt das Sichtfeld des Betrachters
![Page 37: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/37.jpg)
Sichtfelder – Clipping Ebenen
![Page 38: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/38.jpg)
Kameramatrix
Virtueller Beobachter lässt sich in 3D Szene einfügen 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
![Page 39: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/39.jpg)
Implementierung
• Variablen der Klasse tbMatrix
• 16 float Variablen (m11 bis m44)
• Konstruktoren
• Standardkonstruktor
• Kopierkonstruktor mit Referenz auf eine andere Matrix. Kopiert die angegebene Matrix
• Konstruktor der die Werte der float-Parameter in die Matrix hineinkopiert
![Page 40: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/40.jpg)
Operatoren
• Addition und Subtraktion sind identisch zur Vektorklasse
• Divisionsoperator invertiert rechte Matrix und multipliziert linke damit
• tbMatrixInvert
• tbMatrixTranspose
• Multiplikation ist recht komplex
![Page 41: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/41.jpg)
Operatoren
inline tbMatrix operator * (const tbMatrix& a,
const tbMatrix& b)
{
return tbMatrix(b.m11 * a.m11 + b.m21 * a.m12 + b.m31 * a.m13 + b.m41 * a.m14,
b.m12 * a.m11 + b.m22 * a.m12 + b.m32 * a.m13 + b.m42 * a.m14,
b.m13 * a.m11 + b.m23 * a.m12 + b.m33 * a.m13 + b.m43 * a.m14,
[…]
[…]
[…] );
}
• Es lohnt sich auf vorhandene CPU-Features zurückzugreifen
![Page 42: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/42.jpg)
Zugriffsoperatoren
• Zur Übergabe von Variablen benötigt man ein zweidimensionales Array
class TRIBASE_API tbMatrix{public:
union{
struct {
float m11, m12, m13, m14, //Elemente der Matrixm21, m22, m23, m24,m31, m32, m33, m34,m41, m42, m43, m44;
}float m[4] [4]; //Zweidimensionales Array
};[…]
![Page 43: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/43.jpg)
Zugriffsoperatoren
• Durch Überladen des „()“-Operators der tbMatrix-Klasse kann man Elemente einzeln ansprechen
class TRIBASE_API tbMatrix{public:
[…] //Zugriffsoperatorenfloat& operator () (int iRow, int iColumn) {return m[iRow - 1] [iColumn - 1];}float operator () (int iRow, int iColumn) const {return m[iRow - 1] [iColumn - 1];}};
tbMatrix m; //Matrixelemente lassen sich einzeln verändernm(1, 3) = 100.0f; m(2, 1) = -50.0f;
float f = m(1, 2); // zur allgemeinen Abfrage
![Page 44: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/44.jpg)
Implementierung
• Identitätsmatrix und Translationsmatrix lassen sich leicht erzeugen
TRIBASE_API tbMatrix tbMatrixTranslation (const tbVector3& v){
return tbMatrix (1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
v.x, v.y, v.z, 1.0f);
• Identitätsmatrix wird durch tbMatrixIdentity erzeugt, in dem man die ersten drei Zeichen der letzten Zeile auf 0.0f setzt.
![Page 45: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/45.jpg)
Implementierung
• Rotationsmatrix
• Man kann Rotation für alle Achsen separat vornehmen Seite 79-80
• tbMatrixRotationX
• tbMatrixRotationY
• tbMatrixRotationZ
• Sinus- und Kosinuswerte müssen nur einmal berechnet werden.
![Page 46: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/46.jpg)
Implementierung
• Rotation um alle drei Achsen
TRIBASE_API tbMatrix tbMatrixRotation (const tbVector3& v)
{
return tbMatrixRotationZ(v.z) * tbMatrixRotationX(v.x) * tbMatrixRotationY(v.y);
}
• Rotation um eine beliebige Achse ebenfalls möglich Seite 81
• tbMatrixRotationAxis
![Page 47: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/47.jpg)
Implementierung
• Skalierungsmatrix
TRIBASE_API tbMatrix tbMatrixScaling (const tbVector3& v)
{
return tbMatrix(v.x, 0.0f, 0.0f, 0.0f,
0.0f, v.y, 0.0f, 0.0f,
0.0f, 0.0f, v.z, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
}
![Page 48: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/48.jpg)
Weitere Hilfsfunktionen
• tbMatrixAxes
• Man übergibt Achsenvektoren zur Berechnung der Achsenmatrix
• Ausgabe der Ausrichtung eines Objekts
• tbMatrixDet
• Bestimmt Determinante einer Matrix
• tbMatrixInvert
• Invertiert angegebene Matrix
• tbMatrixTranspose
• Transponiert eine Matrix
![Page 49: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/49.jpg)
Weitere Hilfsfunktionen
• tbMatrixcamera
• Kameramatrix berechnen durch Positionsvektor vPos, Richtungsvektor vLookAt und „Nach-Oben-Vektor“ vUp für Kameradrehung
• Translationsmatrix wird entgegengesetzt der Kameraposition erzeugt
• Achsenvektoren der Kamera in eine Matrix eintragen
• Beide multiplizieren und man erhält die Kameramatrix
• tbMatrixProjection
• Erzeugt eine Projektionsmatrix
![Page 50: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/50.jpg)
Weitere Hilfsfunktionen
• tbVector3TransformCoords
• Positionsvektor mit Matrix multiplizieren
• W-Koordinate wird für den Fall einer Projektion geprüft
• tbVector3TransformNormal
• Richtungsvektor mit Matrix multiplizieren
• Transponierte invertierte Matrix wird benötigt
• Transformierter Vektor soll selbe Länge wie Originalvektor erhalten
• Hierfür wird ursprüngliche Länge gespeichert
![Page 51: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/51.jpg)
Hilfsfunktionen
Auch die Matrix kann man ins Logbuch schreiben tbWriteMatrixToLog
Übersicht der Hilfsfunktionen für Matrizen und Beispielcode auf Seite 87
Für die Transformation von 2D-Vektoren gibt es die Funktionen tbVector2TransformNormal und tbVector2TransformCoords
![Page 52: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/52.jpg)
Ebenen
![Page 53: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/53.jpg)
Ebenengleichung
• Bestimmt die Menge der Punkte aus denen eine Ebene besteht
• Stützvektor
• Liegt in der Ebene
• Normalenvektor
• Steht senkrecht auf der Ebene
• Verbindet man einen Punkt mit dem Stützvektor muss der Verbindungsvektor senkrecht zum Normalenvektor stehen
![Page 54: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/54.jpg)
Lage eines Punktes
• Durch Ebenengleichung lässt sich herausfinden ob ein Punkt auf der Ebene liegt (Ergebnis null)
• Ist das Ergebnis positiv, liegt der Punkt auf der Vorderseite (sichtbaren Seite) einer Ebene
• Ist das Ergebnis negativ, liegt der Punkt auf der Rückseite (nicht sichtbaren Seite) einer Ebene
• Ergebnis der Ebenengleichung wird mit Normalenvektor dividiert um Entfernung des Punktes zu der Ebene herauszufinden.
![Page 55: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/55.jpg)
![Page 56: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/56.jpg)
Implementierung
• tbPlane
• Vier Variablen (Fließkommazahlen) a, b, c und d
• Zusätzlich eine tbVector3-Variable n (Normalenvektor)
• Kopierkonstruktor
• Leerer Konstruktor
• Konstruktor der vier float-Werte erwartet
• Konstruktor, der tbVector3-Wert und einen float-Wert erwartet
• Operatoren gibt es nicht
![Page 57: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/57.jpg)
Hilfsfunktionen
• tbPlaneNormalize
• Normalisiert Ebenen
• tbPlaneDotNormal
• Punktprodukt aus einem Vektor und dem Normalenvektor aus der Ebene
• tbPlaneDotCoord
• Soll Punkt in Ebenengleichung einsetzen und das Ergebnis zurückliefern
• tbPointPlaneDistance
• Distanz eines Produkts zur Ebene
![Page 58: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/58.jpg)
Hilfsfunktionen
• tbPlaneFromPointNormal
• Erwartet einen Punkt und einen Normalenvektor und liefert die Ebene
• tbPlaneTransform
• Man kann auch Ebenen mit Matrizen transformieren
• tbWritePlaneToLook
• Schreibt eine Ebene in die Logbuchdatei
• Übersicht der Hilfsfunktionen und Beispielcode auf Seite 94
![Page 59: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/59.jpg)
RGB-Farbsystem
• Ehemalige 8-Bit Grafik erschwerte eine ausgewogene Farbgebung
![Page 60: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/60.jpg)
RGB-Farbsystem
• 16-Bit-Grafik
• Darstellung eines Pixels basierte auf dem RGB-System
• 16 Bits aufgeteilt in 5 Rotanteile, 6 Grünanteile und 5 Blauanteile
• 24-Bit-Grafik gefolgt von 32-Bit-Grafik
• Bei 32 Bits bleiben 8 Bits für Farbinformationen wie Transparenz
![Page 61: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/61.jpg)
RGB-Farbsystem
• Die vier Komponenten betrachtet man jeweils als ein Byte
• Bei Direct3D ist es auch möglich Fließkommazahlen (float-Wert) für die einzelnen Farbkomponenten zu verwendet
![Page 62: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/62.jpg)
Implementierung
• Klasse tbColor
• Vier float-Variablen (r, g, b und a – Alpha)
• Konstruktoren:
tbColor a(); //kein Parameter
tbColor b(0.5f); //Fließkommazahl r,g,b bekommen den Wert
tbColor c(0.0f, 1.0f, 0.0f, 0.5f); //float-Werte
tbColor d((BYTE) (0), 255, 0, 128); //Byte-Werte
tbColor e((DWORD) (0xFF00FF80)); //DWORD-Wert
![Page 63: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/63.jpg)
Operatoren
• Addition ergibt additive Mischung zweier Farben
• Multiplikation
• mit positivem Wert über 1 hellt auf
• Mit positivem Wert unter 1 dunkelt ab
![Page 64: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/64.jpg)
Casting
• Farbe in ein DWORD-Wert verwandeln
tbColor Red(1.0f, 0.0f, 0.0f);
DWORD dwRed = (DWORD) (Red); //Casting verwenden
Red = tbColor(dwRed); //Konstruktor verwenden
![Page 65: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/65.jpg)
Weitere Hilfsfunktionen
• tbColorNegate
• Berechnen des Negativs
• tbColorBrightness
• Berechnung der Helligkeit
• tbColorRandom
• Erzeugt Zufallsfarbe
Diese und weitere auf Seite 97
![Page 66: Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2012/2013 3D-Grafik: Mathe Linda Scholz](https://reader035.vdokument.com/reader035/viewer/2022070310/55204d6549795902118bade6/html5/thumbnails/66.jpg)