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

1

22.10.2009, 20:10

Drehung um die Achsen

Hallo,

ich sitze jetzt seit Stunden! an einer warscheinlich trivial Aufgabe. Ich habe einen großen Würfel der aus 27 kleien Würfeln besteht (Rubik Cube). Der große Würfel ist im ganzen drehbar. Die Seiten sollen das auch sein. Das geht auch immer mit einer Seite ganz gut, abhängig von

C-/C++-Quelltext

1
g_mRotation = g_mRotationX * g_mRotationY * g_mRotationZ;)


Wenn ich jetzt aber den großen Würfel etwas drehe und dann die oberen 9 Würfelchen um die (eigene?) y- Achse rotieren lassen will, dreht er um den "Welt-Ursprung".
Also habe ich nach diesem Thema gesucht und bin auf den Lösungsanstz gekommen 3 Vectoren zu nehmen, um diese Vectoren zu Rotieren und immer mit der Drehung zu transformieren.

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
26
27
28
29
30
31
void object::objectMatrix() {


    D3DXMatrixRotationAxis(&g_mRotationX, &rotationsAxis.xAxis, D3DXToRadian(rotation.x));

    D3DXVec3TransformCoord ( &rotationsAxis.yAxis, &rotationsAxis.yAxis, &g_mRotationX );
    D3DXVec3TransformCoord ( &rotationsAxis.zAxis, &rotationsAxis.zAxis, &g_mRotationX );


    D3DXMatrixRotationAxis(&g_mRotationY, &rotationsAxis.yAxis, D3DXToRadian(rotation.y));

    D3DXVec3TransformCoord ( &rotationsAxis.xAxis, &rotationsAxis.xAxis, &g_mRotationY );
    D3DXVec3TransformCoord ( &rotationsAxis.zAxis, &rotationsAxis.zAxis, &g_mRotationY );


    D3DXMatrixRotationAxis(&g_mRotationZ, &rotationsAxis.zAxis, D3DXToRadian(rotation.z));

    D3DXVec3TransformCoord ( &rotationsAxis.yAxis, &rotationsAxis.yAxis, &g_mRotationZ );
    D3DXVec3TransformCoord ( &rotationsAxis.xAxis, &rotationsAxis.xAxis, &g_mRotationZ );

    //g_mRotation = g_mRotationX * g_mRotationY * g_mRotationZ;


    D3DXMatrixMultiply(&g_mRotation, &g_mRotation, &g_mRotationX);
    D3DXMatrixMultiply(&g_mRotation, &g_mRotation, &g_mRotationY);
    D3DXMatrixMultiply(&g_mRotation, &g_mRotation, &g_mRotationZ);
    

    D3DXMatrixTranslation(&g_mTranslation,  translation.x,  translation.y,  translation.z);

    D3DXMatrixMultiply(&g_mObjectMatrix, &g_mTranslation, &g_mRotation);
}


nur leider wackelt bei jedem versuch zu drehen der Würfel unnatürlich.

Ich habe jetzt schon viel ausprobiert und weiss nicht mehr wo ich ansetzen soll :(

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

2

22.10.2009, 20:15

Generell würde ich die Objekte in den Ursprung verschieben, drehen und wieder zurückverschieben. Sollte doch passen, oder?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

23.10.2009, 08:47

joa so ist das vollkommen ok, wenn man das zu einer matrix zusammenfasst, ist das die meist gängige technik, um drehung um beliebige punkte zu realisiern^^

4

28.10.2009, 12:24

ja, das ist klar.
Wenn ich das aber so wie oben mache und z.B. um die y-Achse um 90 grad drehe, dann müsste doch der x-Vektor von (1 0 0) zu (0 0 1) = z-Achse werden. Oder versteh ich da etwas falsch?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

28.10.2009, 12:50

joa das sollte er^^

6

28.10.2009, 13:44

wie zu erwarten macht er das aber nicht

mit yAxis = 0 1 0
und xAxis = 1 0 0

rotation.y = 90

C-/C++-Quelltext

1
2
3
    D3DXMatrixRotationAxis(&g_mRotationY, &yAxis, D3DXToRadian(rotation.y));

D3DXVec3TransformCoord(&xAxis, &xAxis, &g_mRotationY);


kommt als Ergebnis : (-4,37114e^-008 0 1) heraus

ich weiss jetzt aber nicht was an der Matrixberechnung falsch sein kann

7

04.11.2009, 18:05

ok, das habe ich jetzt gelöst / verstanden (-4,37114e^-008 geht gegen 0)

Nur ist das eine Problem gelöst kommt das nächste.

Wenn ich mal angenommen um x, dann um y und wieder um x drehe und dann D3DXMatrixRotationAxis aufrufe dreht ich ja um die aktuelle x-Achse und das Ergebnis ist falsch!

Werbeanzeige