Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Anonymous
unregistriert
Anonymous
unregistriert
Quellcode |
|
1 2 3 4 5 |
// Inverse Matrix berechnen, die zum Beispiel gebraucht wird, um // eine absolute in eine zum Objekt relative Position oder Richtung // umzurechnen m_mInvMatrix = tbMatrixInvert(m_mMatrix); |
Zitat
- Wenn ein Objekt sein eigenes relatives Koordinatensystem hat, wodurch wird dieses Repräsentiert? Wie in tbObject eben die drei Vektoren, die die Achsen angeben, ist das richtig?
Bestes Beispiel. Du willst ein Punkt auf Kollision mit einem Komplexeren Modell prüfen. Das beste ist wenn du den Punkte in das Koordinatensystem des Modells Transformierst. Das ist schneller und einfacher. Durch die Inverse Worldmatrix des Modells kannst du den Punkt dann in das Koordsystem des Modells Transformieren.Zitat
Das verstehe ich irgendwie überhaupt nicht. Warum braucht man die inverse Matrix? Und was meint er damit, eine absolute Position zu einer dem Objekt relativen Pos. umrechnen, wozu könnte soetwas gebraucht werden?
Anonymous
unregistriert
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//////////////////////////////////////////////////////////////////// // Richtet das Objekt entlang einer Z-Achse aus // gibt die entsprechende World-Matrix zurück // m_vScaling und m_vPosition müssen deklariert sein //////////////////////////////////////////////////////////////////// tbMatrix Align(const tbVector3& vZAxis, const tbVector3& vUp = tbVector3(0.0f, 1.0f, 0.0f)) { // z-Achse normalisieren und kopieren tbVector3 vZAxis = tbVector3NormalizeEx(vZAxis); // Die x-Achse ist das Kreuzprodukt aus y- und z-Achse tbVector3 vXAxis = tbVector3NormalizeEx(tbVector3Cross(vUp, m_vZAxis)); // y-Achse berechnen tbVector3 vYAxis = tbVector3NormalizeEx(tbVector3Cross(m_vZAxis, m_vXAxis)); // Matrix = Skalierung * Rotation * Translation return(tbMatrixScaling(m_vScaling) * tbMatrixAxes(vXAxis, vYAxis, vZAxis) * tbMatrixTranslation(m_vPosition)); } |
Anonymous
unregistriert
Zitat
Bestes Beispiel. Du willst ein Punkt auf Kollision mit einem Komplexeren Modell prüfen. Das beste ist wenn du den Punkte in das Koordinatensystem des Modells Transformierst. Das ist schneller und einfacher. Durch die Inverse Worldmatrix des Modells kannst du den Punkt dann in das Koordsystem des Modells Transformieren.
Zitat
Also Du hast ja die Tribase...
Du suchts glaube ich nach der methode "Align();"
Genau so sieht es aus. Und jetzt kann man mit relativ einfachen Mittel auf Kollision prüfenZitat
Das heisst, die Koordinaten meines Punktes werden dahingehend verändert, sodass es nun relativ zu dem größeren Objekt ist. Der mittelpunkt ist ja genau in der Mitte des großen Objektes, und somit ist der Welt-Ursprung für meinen Punkt auch genau dort. Ausserdem wird die Ausrichtung des Objektes auf den Punkt übertragen, sodass für den Punkt nun quasi das Koordinatensystem des großen Objektes die "Welt" Koordinaten sind.
Habe ich das so richtig verstanden?
Werbeanzeige