Welche Methoden gibt es, um Bahngleise darzustellen?

21

Ich habe vor einiger Zeit nach einem kleinen Projekt gesucht, bin aber nicht zu weit gekommen. Ich möchte ein kleines Programm erstellen, mit dem ein Benutzer ein Gleis zeichnen und dann einem "Zug" erlauben kann, dem Gleis in einer 2D-Ebene zu folgen. Ich möchte, dass der Track ziemlich frei ist und eine schöne glatte Linie ergibt. Ich spielte mit kubischen Splines herum und hatte gute Ergebnisse, aber ich hatte eine Menge Mühe, den Zug dazu zu bringen, dem Spline zu folgen. Ich hatte auch große Probleme, mehrere Gleise zu erstellen und einen Zug von einem Gleis auf ein anderes umzuschalten.

Hat jemand Ratschläge, Artikel oder Quellcode, die mir helfen können, etwas herauszufinden? Vielen Dank!

hokiecsgrad
quelle
3
Es wäre hilfreich, wenn Sie beschreiben würden, auf welche Probleme Sie stoßen.
Rachel Blum
1
Ich würde gerne eine Demo Ihres Spiels sehen.
Asche999

Antworten:

10

Beim Zeichnen von Tracks oder Straßen möchte ich immer mit Splines beginnen. Als ich das letzte Mal mit Splines kämpfte (wie Rachel Blum erwähnt, ist eine reibungslose Bewegung auf einem Spline sowohl aufgrund der Parametrisierung als auch der Entfernungen schwierig), schlug mir jemand vor, dass viele reale Straßen Kreisbögen anstelle von Splines verwenden. Die konstante Krümmung macht es einfach , Entfernungen zu berechnen und sich mit einer konstanten Geschwindigkeit entlang dieser zu bewegen. Außerdem sehen sie gut aus.

Ich begann mit Straßen zu spielen, die sich zwischen Kreisbögen und geraden Linien abwechselten. Es ähnelt Wills Ansatz, aber die Kreisbögen haben einen variablen Radius. Ich war mit diesem Ansatz sehr zufrieden, habe aber am Ende nichts damit gemacht. Probieren Sie diese Demo (Flash) aus: Die Steuerelemente auf der linken Seite sind für Splines und die Steuerelemente auf der rechten Seite für einen Kreisbogen (verwenden Sie den Schieberegler, um die Länge zu steuern, und den Ziehpunkt, um den Winkel zu steuern). Machen Sie eine sehr enge Kurve, indem Sie das Ende der Straße ziehen, um zu sehen, wie viel schöner der Kreisbogen aussieht.

Wenn Sie alternativ mit Gittern spielen möchten (vorgeschlagen von Iain ), versuchen Sie, von Kante zu Kante anstatt von Quadrat zu Quadrat zu zeichnen. Hier ist eine Demo (Java-Applet).

amitp
quelle
7

Die Verwendung geeigneter Hermite-Splines kann zu engen Ecken führen und sieht eher nicht wie ein Zug aus:

mit Einsiedlerkeilen

Ich habe viel erfreulichere Ergebnisse erzielt, wenn ich den Pfad als gerade Linien behandele, die Kreise an den Gelenken verbinden:

Bildbeschreibung hier eingeben

Der Trick besteht darin, die inneren und äußeren Tangenten benachbarter Gelenkkreise zu berechnen und die Wicklung jedes Gelenks so zu berechnen, dass Sie auf der rechten Seite davon vorbeigehen.

Vermeiden Sie in der Logik für das Verlegen von Pfaden Selbstkreuzungen oder verwandeln Sie sie in Kreuzungen :)

In diesem Video wird dieser Ansatz verwendet: http://www.youtube.com/watch?v=PAVksn4btKU

Wille
quelle
6

Sie können versuchen, den Benutzer die Tracks mit Cornu-Spiralen erstellen zu lassen . Sie finden nahezu keine Literatur dazu im Internet, da Splines de facto die Möglichkeit darstellen, Kurven in Software darzustellen. Nichtsdestotrotz ist dies die Art und Weise, wie die tatsächlichen Eisenbahnschienen befahren werden. Raph Levien hat viel Arbeit geleistet, um sie bekannt zu machen .

herrlich
quelle
2

Sie können einen gitterbasierten Ansatz verwenden, bei dem jedes Quadrat mit einem oder mehreren anderen Quadraten verknüpft werden kann. Sie könnten dann einige Teile haben, die mehrere Quadrate abdecken, um glattere Kurven zu erzeugen. Grundsätzlich modular wie ein Zugset.

Iain
quelle
1
Ich habe etwas Ähnliches wie einen gitterbasierten Ansatz versucht. Grundsätzlich habe ich Track-Stücke erstellt, damit Sie sie so zusammenklicken können, dass Sie ein bisschen mehr Freiheit als bei einfachen Gittern haben. Sehr ähnliches Konzept, denke ich. Es funktionierte in Ordnung, aber das Zeichnen der Spuren durch Auswahl des entsprechenden Stücks jedes Mal Art gesaugt.
hokiecsgrad
2

Ich habe verschiedene Techniken ausprobiert, um Schienen zu implementieren. Dabei stellte ich fest, dass Abschnitte mit Kreisen und geraden Linien das bestaussehendste Ergebnis und die einfachste Mathematik für den Betrieb des Zuges liefern.

Leider machte es auch das Verlegen der Strecke ziemlich kompliziert und wenig intuitiv, da kleine Bewegungen der Kontrollpunkte die Strecke in eine völlig andere Richtung lenken.

Die Mathematik für die Entscheidung, wie die Spur zu legen ist, wird ziemlich schwierig, ebenso wie das Hinzufügen weiterer Kontrollpunkte.

Ich habe eine kurze Demo auf http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .

small_duck
quelle
-1

Vielleicht ist dies hilfreich:
Lenkverhalten für autonome Charaktere: http://www.red3d.com/cwr/steer/

Gregory
quelle
Sind Züge nicht an ihren Gleisen gefangen?
Wird
@ Will: Es gibt einen Unterabschnitt (den ich nicht gelesen habe) über den Pfad, der red3d.com/cwr/steer/PathFollow.html
o0 'folgt.
Ja, aber ein Zug auf einer Strecke kann nur die Geschwindigkeit ändern. Sein Weg wird von der Strecke vorgegeben?
Wird