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

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

1

08.05.2003, 13:59

matrizen zum drehen?

Also wie erstelle ich Matrizen ohne triBase?
Mit welche nFunctionen Lass ich die Gegenstände Rotieren; ICh habs mit D3DXMatrix versucht aber ich seh kein Dreieck mehr?
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

08.05.2003, 14:16

Auf Seite 65 steht, wie Du die verschiedenen Rotationsmatrizen erzeugen kannst. Die Standardstruktur für Matrizen ist D3DMATRIX.

D3DMATRIX m =
{1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f};

Das ist beispielsweise die Identitätsmatrix.
Die kannst Du mit IDirect3DDevice9::SetTransform unter Angabe von D3DTS_WORLD als Weltmatrix setzen.

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

3

08.05.2003, 14:24

Hmm also ich hab so enn Code:

Quellcode

1
2
3
4
5
6
7
D3DXMatrixRotationY((D3DXMATRIX*)(&mRotation),90.0f);
D3DXMatrixTranslation((D3DXMATRIX*)(&mTranslation),0.0f,0.0f,3.0f);
mWorld = mTranslation* mRotation;   
     
g_pDevice->SetTransform(D3DTS_WORLD,(D3DXMATRIX*)(&mWorld));

Aber dann seh ich nichts.
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

08.05.2003, 15:45

Soweit ich es sehe, ist es in Ordnung! Allerdings erwartet D3DXMatrixRotationY keine Gradangabe (Du gibst 90.0f an), sondern den Winkel in Rad!
Wenn Du wirklich nur ein Dreieck renderst und dieses um 90 Grad drehen willst, dann ist es klar, dass Du nichts mehr siehst. Du schaust dann ja von der Seite auf das Dreiecke und da ist ja nichts mehr.
Versuch es mal mit dem Wert D3DX_PI (das wären 180°) geteilt durch 10 oder so, also D3DX_PI / 10.0f.

Nochwas: Wie deklarierst Du mTranslation und mRotation? Diese Variablen sollten vom Typ D3DXMATRIX sein, wie auch mWorld. Dann ist allerdings das Casting (D3DXMATRIX*)(&mTranslation) unnötig.

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

5

08.05.2003, 16:04

Hmm und wie schaff ichs dass das Dreieck sich permanent dreht?
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

6

08.05.2003, 16:06

Also die haben alle D3DXMATRIX als Typ.
Aber warum ist das dann unnötig?
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

7

08.05.2003, 16:18

Ach noch was:Wie kann ich inna MessageBoy nen float als Text benutzen.Ich krieg immer Konvertierungsfehler:(
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

08.05.2003, 17:01

Zitat von »"Shark_3D"«

Also die haben alle D3DXMATRIX als Typ.
Aber warum ist das dann unnötig?


Pass auf:

int Test;
int* pPointerToTest = &Test;

Unnötig wäre folgende Konvertierung:
int* pPointerToTest = (int*)(&Test);

Wenn Du die Adresse von Test per "&"-Operator nimmst, ist das doch schon ein Ausdruck vom Typ int*. Da brauchst Du doch dann kein Casting mehr. Die D3DX-Funktionen erwarten D3DXMATRIX*, Direct3D hingegen D3DMATRIX*.

Nimm sprintf für Umwandlung von float nach Text.

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

9

08.05.2003, 17:19

Bei mir dreht sich das Dreieck net um die eigene Axe sondern um die Kamera und das so schenll das man nur ein flimmer nerkennt.
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

08.05.2003, 17:22

Schau mal auf Seite 67. Da ist erklärt, was Du falsch gemacht hast :)
Du hast die Matrizen falschherum multipliziert.

Werbeanzeige