Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
Geometrische Transformationen in POV-Ray
English English English
Italiano Italiano
Français français

Home
- POV-Ray Tutorial
  Geometrische
  Transformationen
   - Inhalt

    Elementare
    Transformationen
    - "translate<  ... >"
    - "rotate<  ... >"
    - "scale<  ... >"
    - Spiegelung

    Weitere
    Transformationen
    - "matrix<  ... >"
    - Scherung
    - transforms.inc
      - Shear_Trans(...)
      - Matrix_Trans(...)
      - Axial_Scale_Tr.
      - Rotate_Around
      - Axis_Rotate_Tr.
      - Reorient_Trans
      - Point_At_Trans
      - Center_Trans
      - min_+max_extent

    - "transform {  ...  }"
       und "inverse"

    Vektoren und
    Transformationen
    - vrotate
    - vaxis_rotate
    - vtransform
    - vinv_transform
    - vturbulence
    - vnormalize
    - vcross
    - vdot()
    - vlength()
    - VAngle(), VAngleD()
    - VProject_Axis

    Insert Menu Zusatz
    & Download
 
                                           
Transformationen aus "transforms.inc"
In der Include Datei "transforms.inc" sind einige praktische Kombinationen von Abbildungen als Makros definiert. Zu ihrer Verwendung muss man vor ihren ersten Einsatz, am besten im Kopfteil des Szenenbeschreibungstextes, die folgende Zeile in den Text einfügen:
  #include "transforms.inc"

Shear_Trans( New_X, New_Y, New_Z)
Mehrfach-Scherung:
Die ehemalige x-Achse zeigt zum Vektor New_X, die y-Achse zeigt nach New_Y und die z-Achse zeigt nach New_Z.
 Shear_Trans(< 2, 0.5,   0>,
             < 0, 0.5,   0>,
             < 0, 0.5, 0.5>) 
Shear_Trans example

Matrix_Trans( New_X, New_Y, New_Z, D)
Mehrfach-Scherung + Translation:
Die ehemalige x-Achse zeigt zum Vektor New_X, die y-Achse zeigt nach New_Y und die z-Achse zeigt nach New_Z und zusätzlich noch eine Translation (Verschiebung) um den Vektor D.
 Matrix_Trans(< 2, 0.5,  0>,
              < 0, 0.5,  0>,
              < 0, 0.5,0.5>,
              <-0.5, 0, 0> ) 
Matrix_Trans example

Axial_Scale_Trans( Axis, Amount )
Streckung in Richtung einer Achse "Axis" um den Streckungsfactor "Amount"
 Axial_Scale_Trans(< 2,0,2>, 0.5)
               
Axial_Scale_Trans example

Rotate_Around_Trans
( <Rotate.x,Rotate.y,Rotate.z>, Center_of_Rotation )
Rotation mit dem Rotationsvektor <Rotate.x,Rotate.y,Rotate.z> um das Rotationszentrum "Center_of_Rotation".
Rotate_Around_Trans(<   0,  0, 20>,
                    < 1.5,0.5,  1>) 
Rotate_Around_Trans example

Axis_Rotate_Trans( Axis, Angle )
Rotation um eine Achse "" um einen Winkel "Angle" (in Grad).
Axis_Rotate_Trans(< 1,0,2>, 110) 
Axis_Rotate_Trans example

Reorient_Trans( Axis_1, Axis_2 )
Neuorientierung durch Drehung von einer Achse "Axis_1" zur neuen Achse "Axis_2".
Reorient_Trans(< 1,0,0>,
               < 1,0.0,2>) 
 Reorient_Trans example

Point_At_Axis( New_Y_Axis )
Neuorientierung indem die y-Achse auf die "New_Y_Axis" ausgerichtet wird.
#declare New_Y_Axis = <0.25,1,0.15>;
object{ MyObject
        Point_At_Trans( New_Y_Axis )}
Point_At_Axis example

Center_Trans( OBJECT , axis )
a) Zentriert ein deklariertes Objekt 'OBJECT' in y-Richtung.
Center_Trans( OBJECT , y )
Center_Trans example
a) Zentriert ein deklariertes Objekt 'OBJECT' in x- und y-Richtung.
Center_Trans(OBJECT, x+y )
Center_Trans example
a) Zentriert ein deklariertes Objekt 'OBJECT' in x-, y- und z-Richtung.
Center_Trans(OBJECT,x+y+z)
Center_Trans example

Keine Transformation, aber oft hllfreich bei Transformationsproblemen: (built-in feature!)
min_extent( OBJECT_IDENTIFIER )
max_extent(OBJECT_IDENTIFIER)

Dies liefert die Minimum- und Maximum-Koordinaten eines deklarierten Objekts oder die Ecken einer bounding box für diese Objekt.
Achtung: Für CSG intersection und difference oder isosurface repräsentiert die bounding box nicht die tatsächlichen Dimensionen des Objektes!
Center_Trans example
Demo der bounding box:
object{ Wire_Box(min_extent(OBJECT),max_extent(OBJECT),0.05)
        pigment{ rgb<1,0.65,0>}
      } 
Länge in x-Richtung der bounding box:
#declare Length_X =
                max_extent(OBJECT).x - min_extent(OBJECT).x;
Mitte eines Objektes OBJECT:
#declare Center =
              0.5*( min_extent(OBJECT)+ max_extent(OBJECT));

Die hier dargestellten Transformationen können im Abschnitt "Shearing & transform" in meinem "Insert Menu Add-on" als Text-Schablonen verwendet werden.

translate | rotate | scale | matrix | Scherung | transforms.inc | transform | Vektor-Transformationen
top

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