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

soxx

Frischling

  • »soxx« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Klagenfurt

  • Private Nachricht senden

1

07.04.2006, 13:50

Rotationsachse eines Objektes

Hallo !

ich habe folgendes Problem:
Ich habe ein Objekt (x-mesh) frei im Raum platziert/rotiert.
nun möchte ich es um eine achse rotieren (ist eigentlich die y-achse des objektes - welche aber um 40° um die z-achse gedreht worde ist.

ich dachte mir folgendes:
einfach einen vektor für die y - achse annehmen:
(0,1,0), diesen mit der objektmatrix multiplizieren und dann um die daraus resultierende achse rotieren - leider funktioniert das nicht ?!?
was mache ich falsch ?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
D3DXVECTOR3 vLocalYAxis;
vLocalYAxis.x = 0.0f;
vLocalYAxis.y = 1.0f;
vLocalYAxis.z = 0.0f;

// aus der globalen y-Achse mittels der lokalen Matrix die lokale y-Achse berechnen
vLocalYAxis = vectorCrossMatrix(vLocalYAxis, this->m_mMeshMatrix);
// aus einer Rotation um die neue lokale Achse eine neue Rotationsmatrix erstellen
D3DXMatrixRotationAxis(&mRotY, &vLocalYAxis, vRotate_new.y);
// Matrizen multiplizieren
D3DXMatrixMultiply(&mTranslate,&mTranslate,&mRotY);


vRotate_new.y ist eine angabe in rad, um die gedreht werden soll.

vielleicht weiß jemand rat.

mfg
soxx[/code]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

07.04.2006, 14:06

Ich glaube das Thema wurde schon so oft angesprochen, dass es sich lohnen würde, mal die Forumsuche zu bemühen ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

soxx

Frischling

  • »soxx« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Klagenfurt

  • Private Nachricht senden

3

07.04.2006, 14:11

ja ich weiß, das ist ja das dilemma - habe das problem trotzdem nicht lösen können...

Quellcode

1
2
3
4
5
vLocalYAxis = vectorCrossMatrix(vLocalYAxis, this->m_mMeshMatrix);
// aus einer Rotation um die neue lokale Achse eine neue Rotationsmatrix erstellen
D3DXMatrixRotationAxis(&mRotY, &vLocalYAxis, vRotate_new.y);
// Matrizen multiplizieren
D3DXMatrixMultiply(&mTranslate,&mTranslate,&mRotY);


so würde es funktionieren:

Quellcode

1
2
3
4
D3DXMATRIX mRotZ;
D3DXMatrixRotationZ(&mRotZ,vRotate_new.y);
// Roation durchfuehren
D3DXMatrixMultiply(&mTranslate,&mTranslate,&mRotZ);


nur handelt es sich logisch gesehen um die falsche achse - also eine weltdrehung um die z-achse die eigentlich eine y-drehung objektbezogen sein sollte.

Werbeanzeige