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

30.12.2006, 19:14

Dreieck transformieren

hey ho ich bins nochmal -.- (hoff des letzte mal für ne zeit ... )

also ich will ein ganz normales Dreieck, dass ich mit 3 Vertizes erstell, mit einer Matrix transformieren d.h. ich will es z.b. mit einer matrix rotieren lassen oder verschieben. ich hab da jetzt stunden drangesessen und hab alle bespiele vom buch auseinandergepflückt aber hat nix gebracht :cry:

des dreieck bewegt sich einfach net :oops: hier ma der code :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 D3D.SetFVF(SDreieckVertex::dwFVF);
    mWorld = tbMatrixRotationY(TB_DEG_TO_RAD(45.0f)) * tbMatrixTranslation(vCameraPos);
    D3D.SetTransform(D3DTS_WORLD, mWorld);

    
    // Die 3  Vertizes

    aVertex[0].vPosition = tbVector3(512.0f,0.0f,0.5f);
    aVertex[1].vPosition = tbVector3(1024.0f,768.0f,0.5f);
    aVertex[2].vPosition = tbVector3(0.0f,768.0f,0.5f);
    aVertex[0].Color = tbColor(1.0f,0.0f,0.0f);
    aVertex[1].Color = tbColor(0.0f,1.0f,0.0f);
    aVertex[2].Color = tbColor(0.0f,0.0f,1.0f);

    D3D->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, aVertex, sizeof(SDreieckVertex));

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

30.12.2006, 19:18

Wenn das Dreieck sich drehen soll, dann musst du natürlich auch den Winkel mit der Zeit ändern.
In deinem Fall ist der immer 45°...

3

30.12.2006, 19:50

ja des is mir klar dass ich des mit der zeit multiplizieren muss aber des hab ich auch schon alles gemacht also wenn ichs so mach sollts sich ja eigentlich um 45 ° drehen tuts halt net ... :(

Sheddex

unregistriert

4

30.12.2006, 19:55

mWorld = tbMatrixRotationY(TB_DEG_TO_RAD(45.0f)) * tbMatrixTranslation(vCameraPos);

Hast du scheinbar nicht.
TB_DEG_TO_RAD(45.0f * Time) wäre richtig...
Bei dir ist der Rotationszustand konstant 45°.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

30.12.2006, 19:56

Wenn du es so machst, dann wird das dreieck nur verdreht, das bedeutet nicht, dass es sich bewegt.
zeig mal einen screenshot von deinem problem und bitte dein FVF, ich hab bei den koordinaten so ein gefühl...

6

30.12.2006, 20:00

@ dot ja stimmt ich verwende D3DFVF_XYZRHW ... ich habs mal versucht mit D3DFVF_XYZ zu rendern aber da wurds erst gar net gerendert

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

30.12.2006, 20:01

D3DFVF_XYZRHW bedeutet, dass die vertices bereits transformiert sind und von D3D NICHT MEHR transformiert werden ;)

lass mal den translationspart weg und nimm brauchbare koordinaten, wie z.b. (1, -1, 0), (-1, -1, 0), (0, 1, 0).

8

30.12.2006, 20:05

Oh ... danke für den hinweis ^^ aber wie soll ich des jetzt machen ?? weil wie gesagt als ich da D3DFVF_XYZ gesetzt hab hats mir des dreieck net mehr gezeichnet ..


p.s. editierst du immer deine antworten ?? ^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

30.12.2006, 20:05

hab oben noch was editiert, hat vorhin für mich etwas unfreundlich gewirkt, was nicht meine absicht war ;)

EDIT: yep, is so eine unart von mir ^^

10

30.12.2006, 20:23

also ich habs jetzt ma versucht zu machen. es erscheint auch an der stelle an der es sein soll aber es dreht sich immer noch nicht des zuckt nur so komisch vor sich hin ...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
D3D.SetFVF(SDreieckVertex::dwFVF);
    mWorld = tbMatrixRotationY(TB_DEG_TO_RAD(45.0f)*fTime) * tbMatrixTranslation(vPosition);
    D3D.SetTransform(D3DTS_WORLD, mWorld);
    
    // Die 3  Vertizes

    aVertex[0].vPosition = tbVector3(0.0f,1.0f,0.5f);
    aVertex[1].vPosition = tbVector3(1.0f,-1.0f,0.5f);
    aVertex[2].vPosition = tbVector3(-1.0f,-1.0f,0.5f);
    aVertex[0].Color = tbColor(1.0f,0.0f,0.0f);
    aVertex[1].Color = tbColor(0.0f,1.0f,0.0f);
    aVertex[2].Color = tbColor(0.0f,0.0f,1.0f);

   

    D3D->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, aVertex, sizeof(SDreieckVertex));

Werbeanzeige