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

mortl

Frischling

  • »mortl« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Straubing/Bayern

Beruf: Schüler

  • Private Nachricht senden

1

03.03.2003, 13:36

Drehen von Primitiven

Hi,

Ich habe mir eine Klasse für geometrische Formen(Flächen, Würfel...) geschrieben. Ich möchte das in der Draw Funktion der Klasse die Form zuerst in die gewünschte Richtung gedreht und anschließend gezeichnet wird. Zum Drehwinkel gibt es drei Variablen, die durch die Funktion Rotate der Klasse verändert werden können. Alles schön und gut, aber wie drehe ich die Formen richtig, denn bei mir drehen sie sich außer bei der Drehung um die X-Achse die Formen nicht um ihre eigene Achse sondern um den 0 Punkt(glaube ich zumindest).
Hier der Code der Draw Funktion:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   D3DXMATRIX DrehX;
    D3DXMATRIX DrehY;
    D3DXMATRIX DrehZ;
    D3DXMATRIX World; 
    
    D3DXMatrixRotationX(&DrehX, DrehwinkelX);
    D3DXMatrixRotationY(&DrehY, DrehwinkelY);
    D3DXMatrixRotationZ(&DrehZ, DrehwinkelZ);

    D3DXMatrixMultiply(&DrehX, &DrehX, &DrehY);
    D3DXMatrixMultiply(&World, &DrehZ, &DrehX);
    
    D3D->lpD3DDevice->SetTransform(D3DTS_WORLD, &World);

    D3D->lpD3DDevice->SetTexture(0, Texture);
    D3D->lpD3DDevice->SetStreamSource(0, VertexBuffer, sizeof(Vertex));
    D3D->lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,12);


Mortl

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

03.03.2003, 15:31

Hi!

Das ist auch richtig so! Die Objekte drehen sich normalerweise immer um die globale x-, y- und z-Achse und nicht um ihre eigene. Um das zu erreichen, verpasst Du jedem Objekt drei Vektoren, welche die x-, y- und z-Achse des Objekts speichern.
Wenn Du dann ein Objekt drehst, dann drehst Du es nicht mit D3DXMatrixRotationX/Y/Z, sondern mit D3DXMatrixRotationAxis. Dort kannst Du dann angeben, um welche Achse (einer der drei Achsenvektoren des Objekts) gedreht werden soll.
Anschließend musst Du dann die drei Achsenvektoren ebenfalls noch mit dieser Matrix transformieren, denn die Achsen drehen sich ja mit dem Objekt mit.

mortl

Frischling

  • »mortl« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Straubing/Bayern

Beruf: Schüler

  • Private Nachricht senden

3

03.03.2003, 16:38

Ok, die Achse muss als Vektor angegeben werden, oder? Aber wie bekomme ich die X/Y/Z Achse meines Würfel(Mittelpunkt, Breite, Höhe und Tiefe ist bekannt).

Mortl

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

03.03.2003, 17:01

Ja, Achsen sind Vektoren.
Ganz einfach: zu Beginn setzt Du die Achsen auf (1, 0, 0), (0, 1, 0) und (0, 0, 1) (eben ganz normal). Und ab dann drehst Du nur noch um diese Achsen und sorgst - wie oben beschrieben - dafür, dass die Achsen selbst auch mitgedreht werden.

Werbeanzeige