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

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

1

24.06.2004, 21:54

Vorwärtsbewegen eines Rechtecks

Hi,
ich hab ein kleines Projekt, ein Rechteck mit einer Textur drauf soll über den schwarzen Bildschirm fahren und vom Benutzer gesteuert werden. Ich benutze keine RHW Vertices. Drehen kann sich das Rechteck schon, dies wird durch eine Rotationsmatrix bewerkstelligt.

Nun steh ich vor dem Problen des "geradeaus fahrens". Ich weiss einfach nicht weiter, wie bekomme die den einen Vektor der "nach vorn zeigt". Das Objekt ist keine Kugel oder so, man sieht wo vorn und hinten ist ;) Wenn ich die Vertex Daten nehme sind die nicht verändert wurden, soweit ich weiss. Den Winkel und alles hab ich. Ich hab es auch schon mit sin und co probiert, es will einfach nicht klappen.[/b]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

24.06.2004, 22:39

hmm meinst du richtung wohin die kamera sieht? oder den Punkt auf den der würfel ausgerichtet ist?

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

24.06.2004, 23:01

Also eine Kamera dürfte ich nicht haben, weil ich keine Projektionsmatrix hab, es soll nur 2D werden, aber mit keinen RHW Vertices.

Du musst dir das so vorstellen: In der Mitte ist ein Rechteck gezeichnet, das Rechteck hat eine Translations und Rotationsmatrix. Rotieren kann das Rechtck auch schon, um einen Punkt, aber es soll sich nu nach vorn bewegen. Die Translationsmatrix transformiert das Rechteck nach einem Vektor, den hab ich vPosition genannt. Dieser Vektor ist zunächst auf 0, 0, 0 Wenn ich den Vektor ändere, verschiebe ich das Rechteck. Wenn ich es nun um 45° gedreht habe, ist aber "vorn" woanders. Ich hab mir das so gedacht: nun gutr, dann ist ja

Quellcode

1
vPosition += vDirection * fNumPassedSeconds;


Man sollte sich einfach vorstekllen, das Rechteck sei ein Auto, was nun nach vorn fahren soll

vDirection ist ein Vektor der die "Richtung des Rechteckes angibt.
Soweit ja alles gut, aber ich bekomme nicht vDirection berechnet. Zuerst dachte ich das die Vertexe mit geändert werden, was aber ein Fehler war. Dann hätte ich einfach nur eine Gerade aus zwei Vektoren gemacht und fertig, dann hab ich probiert sinus Funktionen zu nutzen, da ich ja den Winkel habe. Das Funktioniert allerdings irgendwie nicht ganz.

Hat jemand ne Idee?

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

4

25.06.2004, 22:58

Ich glaube, du meinst eine 2D-Ansicht von oben, oder?

Jedenfalls willst du bei jedem Move dein Objekt relativ bewegen, nicht absolut, oder? (oder hab' ich es falsch verstanden?)

1. Wenn es nur 2D-Bewegung ist, müsste es ziemlich einfach gehen mit sin und cos

2. Wenn es 3D-Bewegung ist, geht es auch trigonometrisch (In Davids Buch die riesige Formel auf Seite 322), ist aber komplizierter.

3. Man kann auch Matrizen verwenden (relatives Koordinatensystem -> absolutes Koordinatensystem), sprich: siehe tbObject
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

26.06.2004, 09:38

Es hat schon geklappt, vielen Dank trotzdem.

An alle die das selbe Prob haben:
Ich hab das mit Matrizen gelöst. Man multilitziert einfach einen Vektor (wir nennen ihn mal vDirection der den Wert (1.0f, 0.0f, 0.0f) hat mit der Rotationsmatrix seines Objektes. Im der Engine von David gibts da ne Funktion, nennt sich so ähnlich wie: Vector3DTransformCoords, diese erwartet eine Matrix und einen Vektor, den vDirection Vektor. Dann leifert diese Funtkion einen Vektor zurück. Wir nennen ihn vAdd. vDirection wird dabei mit der Rotationsmatrix multiplitziert. vAdd können wir nun einfach unserer Position hinzufügen. Also.

Quellcode

1
vPositon += vAdd * fSpeed * dTime;


und fertig. ;) Dann evtl. noch ein paar veränderungen und man hat eine einigermaßen gute Fahrphysik.

Werbeanzeige