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

Dofter

Treue Seele

  • »Dofter« ist der Autor dieses Themas

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

1

23.07.2006, 22:07

Frage zu S.171 ÜbAufg3

Hallo miteinander.
Ich hab ne Rotationsmatrix erstellen.

C-/C++-Quelltext

1
2
3
4
5
6
7
tbMatrix    mRotationZ;     // Rotationsmatrix

    mRotationZ = tbMatrixRotationZ(20*fNumSecsPassed);      // Rotationsmatrix


    tbVector2TransformCoords(g_aTriangleVertex[0].vTexture, mRotationZ);
    tbVector2TransformCoords(g_aTriangleVertex[1].vTexture, mRotationZ);
    tbVector2TransformCoords(g_aTriangleVertex[2].vTexture, mRotationZ);
    tbVector2TransformCoords(g_aTriangleVertex[3].vTexture, mRotationZ);


Doch es dreht sich nix.
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

2

23.07.2006, 23:17

Re: Frage zu S.171 ÜbAufg3

Zitat von »"Dofter"«

Hallo miteinander.
Ich hab ne Rotationsmatrix erstellen.

C-/C++-Quelltext

1
2
3
4
5
6
7
tbMatrix    mRotationZ;     // Rotationsmatrix

    mRotationZ = tbMatrixRotationZ(20*fNumSecsPassed);      // Rotationsmatrix


    tbVector2TransformCoords(g_aTriangleVertex[0].vTexture, mRotationZ);
    tbVector2TransformCoords(g_aTriangleVertex[1].vTexture, mRotationZ);
    tbVector2TransformCoords(g_aTriangleVertex[2].vTexture, mRotationZ);
    tbVector2TransformCoords(g_aTriangleVertex[3].vTexture, mRotationZ);


Doch es dreht sich nix.


wieso z coordinate? Warum rotierst du nich um x oder y?

versuch außerdem mal bei der Winkelangabe das Makro TB_DEG_TO_RAD
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

3

23.07.2006, 23:21

CW_Kovok
Etwas besser:

C-/C++-Quelltext

1
2
3
4
5
6
7
    // Umrechnung von Bogenmaß in Grad (value*180° / pi)

template<typename T> inline const T rad_to_deg (const T& value)
{ return (value*57.295779513082320876846364f); }

    // Umrechnung von Grad in Bogenmaß (value*pi / 180°)

template<typename T> inline const T deg_to_rad (const T& value)
{ return (value*0.017453292519943295769222f); }
:roll:

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

4

23.07.2006, 23:53

bist du sicher, dass die Zahlen nicht schon als degenriert behandelt werden :p ?
Was es alles gibt, das ich nich brauche - Aristoteles

Dofter

Treue Seele

  • »Dofter« ist der Autor dieses Themas

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

5

24.07.2006, 12:22

Also Die aufgabe heißt, dass man eine Rotationsmatrix für die Rotation um edie Z-ACHSE erstellen soll und damit die 2D-Texturkoordinaten transformieren soll.

Mit Rad to deg oda Deg to Rad tut sich auch noch nix
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

6

24.07.2006, 12:28

Hmm, ein Dreieck mit 4 Ecken? :) Wollen wir das mal glauben.

Du bist auch sicher, dass du die Textur drehen willst, und nicht das Objekt, ja? (Hab das Buch eben nicht vor mir liegen. ;))

Dass der Winkel falsch gerechnet wird, glaube ich eher nicht; schlimmstenfalls müsste es wenigstens flackern, weil du im Moment direkt die Zeit im Bogenmass interpretierst (20 / 2pi Rotationen pro Sekunde, also etwa 3). Aber es ist schon wichtig, möglichst den Wertebereich für Rotationen zu verlassen, der üblicherweise [0, 2pi) ist,

Darum wäre

C-/C++-Quelltext

1
 float angle = ::fmodf (deg_to_rad<float> (20.0f * fNumSecsPassed), TB_2PI)
ein gutes Argument zur Erzeugung der Rotationsmatrix. (deg_to_rad aus nix_da's Implementation, k.a. ob es TB_2PI gibt) Das rotiert mit 20° pro Sekunde.

Wenn das noch nichts bringt, würde ich mal prüfen, was so in fNumSecsPassed drinsteht und ob die Texturkoordinaten nicht alle 0 sind.

Sonst ist eine Rotation um Z korrekt, wenn man Texturkoordinaten transformiert, die normalerweise ja nur X und Y haben (a.k.a. U und V). Die Z-Achse ragt sozusagen aus der X/Y-Ebene raus, in der die Koordinaten dann rotiert werden sollen. Du musst aber berücksichtigen, dass du so auch negative Werte für U und V bekommen kannst, also müssen auch brauchbare Textur-Sampler-States gesetzt sein. (Clip in [0, 1] wäre z.B. doof 8))

Gruss,
Rainer

Edit: Hab mal die Rotationsgeschwindigkeit angepasst, weil die so nicht stimmten.
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

24.07.2006, 13:11

Was für eine genaue Zeitangabe speichert denn die Variable fNumSecsPassed? Ist es die gesamte vergangege Zeit des Programms oder die verstrichene Zeit seit dem letzten Frame?
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Dofter

Treue Seele

  • »Dofter« ist der Autor dieses Themas

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

8

24.07.2006, 13:25

zu den 4 Ecken:
ich hab die Übung, in der man ein 4 Eck zeichnen sollte einfach erweiter. also Textur drübergezogen.
Also die Textur wird die ganze Zeit angezeit, nur dass sie sich nicht Bewegt.
FNumSecsPasses is die Zeit seit dem Letzten Frame.

#Ich habs etzat mal so hingeschrieben:

C-/C++-Quelltext

1
mRotationZ = tbMatrixRotationZ(::fmodf (TB_DEG_TO_RAD(20.0f * fNumSecsPassed), TB_PI));     // Rotationsmatrix

doch es tut sich immer noch nix
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

24.07.2006, 13:40

Es tut sich nix, weil du ja stets die Zeit seit dem letzten Frame verwendest. Diese Zeit ist erstens sehr klein und zweitens in allen Frames relativ identisch bzw. nur minimal abweichend. Insofern wird für jeden Frame annähernd dieselbe Rotation berechnet -- da dreht sich also nix, vielleicht bemerkst du aber ein feines "Zittern"...
Wenn du die Zeiten der einzelnen Frames addierst, erhälst du einen brauchbaren Zeitwert.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

10

24.07.2006, 17:11

Ausserdem ist eine volle Rotation 2pi im Bogenmass, also musst du modulo 2.0f * TB_PI rechnen. Andernfalls gibt es nur eine 180° Rotation (was bei symmetrischen Texturen evtl. gar nicht auffällt)

Gruss,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Werbeanzeige