Du bist nicht angemeldet.

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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

12.01.2013, 15:41

Rotationsmatix

Ich habe mal wieder meine Schwierigkeiten mit Rotationsmatrizen. Es geht um Folgendes: Ich habe ein Viereck(Billboard) wo die Fläche richtung -Z zeigt. Z geht bei mir in den Bildschirm, Y nach oben, X nach rechts. Jetzt möchte ich diese Billboard

-1. um 90° um die Y Achse drehen, sodass die Fläche nach X zeigt
-2. um -45° um Z drehen(damit es leicht schräg nach unten geht)
-3. um 20° um X drehen, damit es nicht senkrecht auf dem Boden ist.

Wenn ich diese Werte mit der Formal Z*X*Y rechne funktioniert alles bis Schritt 3. Wenn ich dann noch die Rotation um X dazu nehme(Schritt 3), verhält sich die Rotation um X wie eine um X und Y.

Ich habe Bilder im Anhang die das ganze verdeutlichen sollen.
Bild 1: Gar keine Rotation
Bild 2: Schritt eins und zwei(Schräg nach unten und Fläche zeigt richtung X)
Bild 3: Rotation um X wo dann plötzlich nichts mehr stimmt.(Fläche zeigt richtung X und richtung Y. Dort möchte ich aber nicht, dass sich das Billboard so verschiebt, dass es aussieht als gehe es von Rechts oben nach links unten.)
Wenn man sich vorstellt, dass wären die Strahlen der Sonne die durch ein Fenster fallen, sieht es in Bild 3 So aus, als ob die Strahlen schräg einfallen. Das möchte ich vermeiden.

Jetzt ist meine Frage: Wie kann ich die Matrix so erzeugen, dass ich das Ergebnis bekomme was ich mir erhofft habe?

Danke.
»FSA« hat folgende Bilder angehängt:
  • 1.jpg
  • 2.jpg
  • 3.jpg

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

12.01.2013, 19:00

Gratulation, du hast so eben das berühmte Gimbal Lock Problem entdeckt. ;)

Was für ein Ergebnis willst du denn genau haben, ich habs leider nicht so ganz verstanden. Wofür genau brauchst du das?

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

12.01.2013, 19:25

Ah das Gimbal Lock Problem erklärt so einiges auch in meine Editor... Wie genau kann man das umgehen?

Das Ergebnis soll aussehen, also ob Sonne in das Fenster scheint und GodRays in den Raum scheinen (wie auf Bild 2). Das Problem ist nur wenn man sich nun an den Billboards vorbeibewegt, sieht man stark das es nur Billboards sind. Deswegen dachte ich mir, ich drehe die Billboards etwas zur Seite. So erkannt man nicht sofort das es Billboards sind wenn man exakt gerade reinguckt. Man guckt dann ja auf die Oberseite der Billboards.

Im Bild sieht man wie ich es meine. Nur das auch dort die Billboards das Problem haben wie ich in Bild 3. Sie sollen gerde durch das Fenster fallen nicht so abgeschrägt nach Links.
»FSA« hat folgendes Bild angehängt:
  • MView.png

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

12.01.2013, 19:39

Ah das Gimbal Lock Problem erklärt so einiges auch in meine Editor... Wie genau kann man das umgehen?

Gimbal Lock ist ein prinzipielles Problem von Eulerwinkeln. So lange du Eulerwinkel verwendest, kann Gimbal Lock auftreten.

Das Ergebnis soll aussehen, also ob Sonne in das Fenster scheint und GodRays in den Raum scheinen (wie auf Bild 2). Das Problem ist nur wenn man sich nun an den Billboards vorbeibewegt, sieht man stark das es nur Billboards sind. Deswegen dachte ich mir, ich drehe die Billboards etwas zur Seite. So erkannt man nicht sofort das es Billboards sind wenn man exakt gerade reinguckt. Man guckt dann ja auf die Oberseite der Billboards.

Ok, du willst also eigentlich deine Billboards einfach um eine Achse rotieren?

Die einfachste Lösung die mir einfällt: Anstatt überhaupt etwas zu rotieren, steck einfach zwei Billboards X-förmig ineinander, das könnte schon gut genug aussehen... ;)

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

5

12.01.2013, 19:49

Nein nicht um eine Achse. Ich möchte quasi das Schritt drei meine Billboards auf die Seite dreht, ohne die Richtung zu verändern. Lässt das ganze sich mit Quaternionen lösen?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

12.01.2013, 19:53

Ja. Quaternions sind ja quasi eine freie Achse, um die rotiert wird.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

12.01.2013, 20:03

Nein nicht um eine Achse. Ich möchte quasi das Schritt drei meine Billboards auf die Seite dreht, ohne die Richtung zu verändern.

...also möchtest du um eine gegebene Achse (ich meine eine beliebige Achse, nicht eine Koordinatenachse) rotieren...

Lässt das ganze sich mit Quaternionen lösen?

Ja, aber es geht mit Matrizen genauso und ich sehe nicht, was Quaternionen in gegebenen Fall für einen Vorteil bringen würden.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

8

12.01.2013, 21:27

Habe mir jetzt eine Achse erzeugt, die durch das Billboard nach unten läuft. (0.0 | 0.76 | -0.64) Ist die Achse. Wenn ich jetzt um diese Achse drehe habe ich das selbe Problem. Es gibt keine Veränderung. Code um eine Achse drehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FF_API Matrix MatrixRotationAxis( const Vector3& v, 
                                          const float f )
{
    const float fSin = sinf( -f );
    const float fCos = cosf( -f );
    const float fOneMinusCos = 1.0f - fCos;
    const Vector3 vAxis( Vector3Normalize( v ) );

    return Matrix( ( vAxis.x * vAxis.x ) * fOneMinusCos + fCos, 
                    ( vAxis.x * vAxis.y ) * fOneMinusCos - ( vAxis.z * fSin ), 
                    ( vAxis.x * vAxis.z ) * fOneMinusCos + ( vAxis.y * fSin ), 
                    0.0f, 
                    ( vAxis.y * vAxis.x ) * fOneMinusCos + ( vAxis.z * fSin ), 
                    ( vAxis.y * vAxis.y ) * fOneMinusCos + fCos, 
                    ( vAxis.y * vAxis.z ) * fOneMinusCos - ( vAxis.x * fSin ), 
                    0.0f, 
                    ( vAxis.z * vAxis.x ) * fOneMinusCos - ( vAxis.y * fSin ), 
                    ( vAxis.z * vAxis.y ) * fOneMinusCos + ( vAxis.x * fSin ), 
                    ( vAxis.z * vAxis.z ) * fOneMinusCos + fCos, 
                    0.0f, 
                    0.0f, 
                    0.0f, 
                    0.0f, 
                    1.0f );
}

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

12.01.2013, 21:58

Was genau bedeutet "keine Veränderung"? Willst du, dass das Billboard immer zur Kamera schaut?

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

10

12.01.2013, 23:03

Nö. Nur das Billboard ist genauso wie vorher. Ob ich jetzt Schirtt 3 mache oder ihn mit einer Rotation um eine beliebige Achse drehe kommt das selbe bei raus.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige