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

killmichnich

unregistriert

1

29.05.2010, 15:05

Direct3D: Verschieben, Rotieren, Skalieren ...

Hallo Community,

ich verzweifle gerade bei den oben genannten Operationen mit der Weltmatrix, um die Eigenschaften von Objekten zu verändern.
Ich hab 3 Infos über ein Objekt: Die Position, die Rotation und die Skalierung.
Die 3 versuch ich so zusammen zu bringen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
    D3DXMATRIX TransMatrix;
    D3DXMATRIX RotMatrix;
    D3DXMATRIX WorldMatrix;

    D3DXMatrixTranslation(&TransMatrix, Position.x, Position.y, Position.z);

    D3DXMatrixRotationYawPitchRoll(&RotMatrix, Rotation.y, Rotation.x, Rotation.z);

    D3DXMatrixMultiply(&WorldMatrix, &RotMatrix, &TransMatrix);

    D3DXMatrixScaling(&WorldMatrix, Scaling.x, Scaling.y, Scaling.z);

    Direct3D->Device->SetTransform(D3DTS_WORLD, &WorldMatrix);

Bevor ich so versucht hab das zu skalieren hats auch noch geklappt, aber jetzt steht das Objekt nicht mehr an der Position wos hin soll. Ich denke ich weiß warum das so ist, weiß aber nicht genau was ich dagegen tun soll.

Kann mir einer sagen, wie ichs anstellen muss, dass das Objekt an seine eigentliche Position kommt, aber trotzdem skaliert wird?

Freue mich sehr über eure Hilfe ... ^^

MfG Killmichnich

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

29.05.2010, 15:07

Translation erst ganz am Ende.

btw:
D3DXMatrixScaling gibt dir in WorldMatrix die Matrix, die lediglich die Skalierung enthält. Du musst da also auch eine temporäre Matrix haben und dann multiplizieren.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

29.05.2010, 15:15

Um es gleich mal ein bisschen auszuschweifen:

möchtest du eine Verschiebung, die unabhängig von der Drehung ist, so nutze folgende Reihenfolge:

S - Scaling
X/Y/Z - Rotation
T - Translation

World = S * Z * Y * X * T

ansonsten, wenn du folgende nutzt

World = S * T * X * Y * Z

dann dreht sich das Objekt nicht um die eigene Achsen sondern zum Weltkoordinatenursprung (weil zuerst bewegt wird).

Für allgemeine Objektbewegungen in 3D kannst du dir im Magazin auch einen Artikel ansehen ;)

link

Werbeanzeige