Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
Modelleisenbahn u. Eisenbahn-Modelle mit POV-Ray
English English English
Italiano Italiano
Français français

Home
- POV-Ray Tutorial

- Modelleisenbahn u.
  Eisenbahn-Modelle
  mit POV-Ray
    Inhaltsverzeichnis

  - Mein Rail Track System
    für POV-Ray
    Gleis Elemente
    - Geraden & Kurven
    - Weichen
    - Y- u. 3Wege-Weichen
    - Kreuzungen

    - Vereinfachte Anwendung
      mit RT_System_00.inc
      - Gleis Elemente
        mit RT_System_00.inc

    - An Modell-Maßstäbe
      angepaßte Gleiselemente
      - H0 Scale Gleise
      - N Scale Gleise
      - Z Scale Gleise

    - Gleisplan-Design mit
      skalierten Gleisen
      - Verlegen von Gleisen
     > Gleise rauf u. runter

    - Gleisplan-Design Beispiele
      - Einfach zyklisch
      - Einfacher Achter

    - Download
      Rail Track System
                                                         
Tracks up and down
Gleisplan-Design mit skalierten Gleisen
   Gleise rauf u. runter

Demonstration mit Spur N Gleissystem von Geometrie Typ A:

1) Geraden und Kurven rauf u. runter

Gleise rauf u. runter durch Scherung mit dem Makro
    Track_Up_00("NAME",STEP,GRADIENT_TYPE)

Hier:
NAME der Name des Gleiselements das geschert werden soll:
z.B.: T_222, T_115, T_111, T_107, T_058, T_055, T_028,
T_R1_45, T_R1_30, T_R1_15, T_R2_45, T_R2_30, ...
STEP der Wert der Höhendifferenz in Meter für Spur N Gleise.
GRADIENT_TYPE:
0 für einfach aufwärts (oder abwärts, falls negativer STEP)
1 für unterteiltes Anfangs-Aufwärts mit weichen Übergang (nur für T_222, T_115, T_111, T_107, und Kurven der Winkel 45°, 30° und 15!.)
2 für unterteiltes End-Aufwärts mit weichen Übergang (nur für T_222, T_115, T_111, T_107, und Kurven der Winkel 45°, 30° und 15!.)


Anmerkung: Die Verwendung einer Scherung anstelle einer Rotation ist aus geometrischer Sicht natürlich nicht ganz genau. Die senkrechte Projektion eines nach oben gedrehten Gleises auf die Grundebenen ist kürzer als das Gleis selbst (Pythagoras!)!
Aber diese Vereinfachung macht das Designen von Gleisplänen dramatisch einfacher, da man nicht irgendwelche veränderten Längen berechnen muß.
Und für geringe Steigungen ist der Unterschied meistens kleiner als die Toleranz, welche man bei wirklichen Modellbahngleisen hat.
//----------------------------------------------//
#local Step_1 = 0.02;
object{ Track_Up_00("T_111",Step_1,0)
                  translate<0*L111,0*Step_1*N,0>}
object{ Track_Up_00("T_111",Step_1,0)
                  translate<1*L111,1*Step_1*N,0>}
//----------------------------------------------//

Harter und weicher Übergang:
Wenn man Steigungen mit scharfen Knicks am Anfang und am Steigungsende macht, so ist dies nicht nur eine ästhetisch suboptimale Lösung, es wird auch bei den Modellbahnzügen schwere Probleme hervorrufen.
Um dies bei POV-Ray-Gleisplänen zu vermeiden, kann man die Unterteilung
GRADIENT_TYPE 1 (start) und 2 (end of gradient)
mit ~ 1/2 der sonst verwendeten Steigung STEP verwenden.
//----------------------------------------------//
#local Step_1 = 0.0225;
object{ Track_Up_00("T_111", Step_1/2, 1)
                translate<0*L111,0.0*Step_1*N,0>}
object{ Track_Up_00("T_111", Step_1  , 0)
                translate<1*L111,0.5*Step_1*N,0>}
object{ Track_Up_00("T_111", Step_1/2, 2)
                translate<2*L111,1.5*Step_1*N,0>}
//----------------------------------------------//






Sharp and smooth transition
Gleise geschert mit dem Makro
Track_Up_00("NAME",STEP,GRADIENT_TYPE)











Sharp and smooth transition
Harter und weicher Übergang

2) Kurven rauf und runter.
Spezielles Problem dabei: Es gibt keine Funktion in POV-Ray die ein Objekt spiralförmig verdreht! Daher kann man keinen weichen Übergang für beide Schienen durch Rotieren und/oder Scherung der Gleise erhalten.
Lösung: Man kann die Kurvenelemente unterteilen um die Abweichung zu minimieren!
Anmerkung: Dies ist nur relevant bei den POV-Ray-Darstellungen von Steigungen in Kurven!
Wirkliche Modellbahngleise machen hier normalerweise keine Probleme!
Anstatt:
//----------------------------------------------//
object{ Track_Up_00("T_L1_45",Step_1,0)
        Rotate_Around_Trans(<0,-0*45,0>,<0,0,R1>)
        translate<0,0*Step_1*N,0>}
object{ Track_Up_00("T_L1_45",Step_1,0)
        Rotate_Around_Trans(<0,-1*45,0>,<0,0,R1>)
        translate<0,1*Step_1*N,0>}
//----------------------------------------------//
Besser: Using curves splitted in smaller angles:
//----------------------------------------------//
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-0*15,0>,<0,0,R1>)
        translate<0,0*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-1*15,0>,<0,0,R1>)
        translate<0,1*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-2*15,0>,<0,0,R1>)
        translate<0,2*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-3*15,0>,<0,0,R1>)
        translate<0,3*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-4*15,0>,<0,0,R1>)
        translate<0,4*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-5*15,0>,<0,0,R1>)
        translate<0,5*Step_1*N,0>}
//----------------------------------------------//
Anmerkung: Unterteilte Kurvengleise (GRADIENT_TYPE 1 oder 2) gibtes nur bei den Kurvenwinkeln 45°, 30° und 15°.
Unterteilte gerade Gleise gibt es nur für die Geraden T_222, T_115, T_111, and T_105.
Für den weichesten Übergang in Kurven sollte man nur die 15°-Segmente von Kurven hierbei verwenden!
Für gebogene Gleise benötigt man oft eine Drehung des Gleises um einem Winkel um ein Rotationszentrum unter Verwendung des Makros 'Rotate_Around_Trans( RotationVector, Center_of_Rotation )' aus der Include-Datei 'transforms.inc'.
Man kann den langen Befehl
'Rotate_Around_Trans(<0, 1*15,0>,<0,0,-R1>)'
durch den kürzeren Ausdruck ersetzen,
wie etwa 'RTyz( 1*15, -R1 )'
indem man das folgende Makro deklariert:
//-----------------------------------------------//
#include "transforms.inc"
#macro RTyz( Y_Angle, Z_Distance )
Rotate_Around_Trans(<0,Y_Angle,0>,<0,0,Z_Distance>)
#end
//-----------------------------------------------//
Damit wird obiger Text wesentlich kürzer:
//----------------------------------------------//
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-0*15,R1) translate<0,0*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-1*15,R1) translate<0,1*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-2*15,R1) translate<0,2*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-3*15,R1) translate<0,3*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-4*15,R1) translate<0,4*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-5*15,R1) translate<0,5*Step_1*N,0>}
//----------------------------------------------//
screw without smooth transition
Kurvengleise geschraubt mittels Scherung in y - ohne weichen Übergang
screw with more smooth transition
Kurvengleise geschraubt mittels Scherung in y - mit weichem Übergang
screw with more smooth transition
Kurvengleise geschraubt mittels Scherung in y - mit weichem Übergang

2) Weichen und andere Gleiselemente rauf und runter.
Mit Weichen und Kreuzungen kann man 'Track_Up_00(...)' nicht verwenden!
Für solche Gleiselemente benötigt man direkt die Scherung mittels Matrix von POV-Ray.
Dies kann durch das folgende Makro vereinfacht werden,
welches ein Element der x-Länge 'Shear_Len' schert
um eine Schritthöhe von 'Step_Up'('+' oder '-' in Spur-N-Werten in Meter) in y-Richtung:
#macro Shear_Up(Shear_Len,Step_Up) //-----------//
 matrix<1,Step_Up*N/Shear_Len ,0,
         0,1,0, 0,0,1, 0,0,0>
#end // end of macro ---------------------------//

Das Beispiel des nebenstehende Bildes:
//----------------------------------------------//
#declare TD = Track_Distance;
object{ SW_L( SD_1) translate< 0*L111,0,0>}
object{ T_R9_15
        Rotate_Around_Trans(<0,-1*15,0>,<0,0, R9>)
                    translate< 0*L111,0,0>}
object{ T_111       translate< 1*L111,0,0>}
// tracks upward:
object{ Track_Up_00("T_111",Step_1,0)
        translate<2*L111,0*Step_1*N,1*TD>}
object{ Track_Up_00("T_111",Step_1,0)
        translate<2*L111,0*Step_1*N,0>}

object{ SW_R(SD_2) Shear_Up(L111,Step_1)
        translate<3*L111,1*Step_1*N,1*TD>}
object{ Track_Up_00("T_111",Step_1,0)
        translate<3*L111,1*Step_1*N,0>}

object{ Track_Up_00("T_111",Step_1,0)
        translate<4*L111,2*Step_1*N,1*TD>}
object{ SW_R(SD_3) Shear_Up(L111,-Step_1)
        rotate<0,180,0>
        translate<5*L111,3*Step_1*N,0>}
//----------------------------------------------//













shearing of turnouts
Scherung von Weichen und anderen Gleiselementen


top

© Friedrich A. Lohmüller, 2011
www.f-lohmueller.de