Startseite < Informatik < Algorithmen Datenstrukturen / Software-Engineering / Programmiersprachen < Compiler Interpreter / Java C/C++ POV-Ray < [ DRUCK , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 ] POV-Ray-Koordinaten POV-Ray-Schachspiel POV-Ray-Zauberwürfel > LaTeX > / Künstliche Intelligenz > Schach Privates / Inhalt >
POV-Ray-Koordinaten
Das POV-Ray-Koordinaten basiert auf dem Linke-Hand-System.
Einführung Allgemeines zum Koordinatensystem unter POV-Ray
Oftmals fragt man sich, wohin die Koordinatenachsen unter POV-Ray zeigen. Aus diesem Grunde habe ich einmal das Koordinatensystem unter POV-Ray erstellt.
Das Koordinatensystem unter POV-Ray
Alle drei Koordinatenachsen

Linke-Hand-System
Für eine Eselsbrücke dürfte sich wohl die linke Hand am besten eignen. Ballt man sie zu einer Faust und streckt anschließend den Daumen, den Zeigefinger und den Mittelfinger, so stellt der Daumen die x-Achse, der Zeigefinger die y-Achse und der Mittelfinger die z-Achse des Koordinatensystems unter POV-Ray dar.
Implementation Erstellung des Koordinatensystems.
Vorliegende Implementation stellt eine absolute Low-Level-Implementation dar, das heißt, sie kommt ohne Makros und ohne Includes aus. Transformationen kommen hier auch nur an den Stellen vor, wo sie unbedingt erforderlich sind — und die Anwendung der CSG-Technik (Constructive Solid Geometry) fehlt hier komplett.

Bei alten POV-Ray-Hasen stößt dies alles natürlich auf Kritik, jedoch mache ich diese Seite nicht für solche Typen! :-)
Erstellung des Koordinatensystems
Bevor man richtig loslegen kann, müssen zunächst ein paar kleine Einstellungen für den Hintergrund und für die Kamera vorgenommen werden.

Mit background legt man die Hintergrundfarbe fest. Grau dürfte eine einigermaßen neutrale Hintergrundfarbe sein.

Mit camera legt man die Kameraeigenschaften und mit location die Kameraposition fest. Mit look_at richtet man die Kamera auf einen bestimmten Punkt aus, hier Ursprung.

Die x-Achse soll nun ein Pfeil werden, der sich aus einem schlanken Zylinder von -3.5 bis +3.0 und einer Pfeilspitze von +3.0 bis +3.5 zusammensetzt.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Mit der Kamera einen Schritt um -8.0 zurück
camera { location <0.0, 0.0, -8.0> look_at <0.0, 0.0, 0.0> }

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
Die blanke X-Achse

Es gibt zwei Gründe für die pechschwarze x-Achse: Zum einen fehlt noch mindestens eine Lichtquelle (light_source), zum anderen wurde für den Pfeil noch keine Textur (texture) definiert.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Mit der Kamera einen Schritt um -8.0 zurück
camera { location <0.0, 0.0, -8.0> look_at <0.0, 0.0, 0.0> }

// Lichtquelle rechts oben neben der Kamera
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
Die blanke X-Achse mit Farbe und Licht

Da noch zwei weitere Achsen folgen werden, sollte die x-Achse beschriftet (text) werden. Die hier verwendete Schriftart (arial.ttf) sollte dem Renderer bekannt sein. Falls Sie jedoch eine besondere, dem System unbekannte Schriftart verwenden möchten, kopieren Sie sie in das Filesystem Ihres POV-Ray-Projekts — dann können Sie auch diese Schriftart zum Rendern benutzen.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Mit der Kamera einen Schritt um -8.0 zurück
camera { location <0.0, 0.0, -8.0> look_at <0.0, 0.0, 0.0> }

// Lichtquelle rechts oben neben der Kamera
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
text { ttf "arial.ttf" "x" 0.1, 0.0 translate <3.4, -0.8, 0.1> }
Die X-Achse mit Beschriftung

Analog zur x-Achse kommt jetzt die y-Achse hinzu.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Mit der Kamera einen Schritt um -8.0 zurück
camera { location <0.0, 0.0, -8.0> look_at <0.0, 0.0, 0.0> }

// Lichtquelle rechts oben neben der Kamera
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
text { ttf "arial.ttf" "x" 0.1, 0.0 translate <3.4, -0.8, 0.1> }

// y-Achse

cylinder { <0.0, -3.5, 0.0>, <0.0, 3.0, 0.0>, 0.05 }
cone { <0.0, 3.0, 0.0>, 0.12, <0.0, 3.5, 0.0>, 0.0 }
text { ttf "arial.ttf" "y" 0.1, 0.0 translate <-0.7, 3.2, 0.1> }
Die X- und Y-Achsen mit jeweiliger Beschriftung

Zu guter Letzt kommt noch die z-Achse für die dritte Dimension ganz analog zu den anderen Achsen hinzu.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Mit der Kamera einen Schritt um -8.0 zurück
camera { location <0.0, 0.0, -8.0> look_at <0.0, 0.0, 0.0> }

// Lichtquelle rechts oben neben der Kamera
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
text { ttf "arial.ttf" "x" 0.1, 0.0 translate <3.4, -0.8, 0.1> }

// y-Achse

cylinder { <0.0, -3.5, 0.0>, <0.0, 3.0, 0.0>, 0.05 }
cone { <0.0, 3.0, 0.0>, 0.12, <0.0, 3.5, 0.0>, 0.0 }
text { ttf "arial.ttf" "y" 0.1, 0.0 translate <-0.7, 3.2, 0.1> }

// z-Achse

cylinder { <0.0, 0.0, -3.5>, <0.0, 0.0, 3.0>, 0.05 }
cone { <0.0, 0.0, 3.0>, 0.12, <0.0, 0.0, 3.5>, 0.0 }
text { ttf "arial.ttf" "z" 0.1, 0.0 translate <0.3, 0.3, 3.8> }
Alle drei Koordinatenachsen in Frontalansicht

Die Frontalansicht eignet sich hier nicht mehr so gut, da sonst die z-Achse nicht sichtbar ist. Aus diesem Grunde werden im Folgenden die Kameraeigenschaften etwas korrigiert, sodass alle drei Koordinatenachsen gut sichtbar sind.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Korrigierte Kameraeinstellungen
camera { location <3.2, 3.5, -6.0> look_at <0.0, 0.8, 0.0> }

// Lichtquelle
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
text { ttf "arial.ttf" "x" 0.1, 0.0 translate <3.4, -0.8, 0.1> }

// y-Achse

cylinder { <0.0, -3.5, 0.0>, <0.0, 3.0, 0.0>, 0.05 }
cone { <0.0, 3.0, 0.0>, 0.12, <0.0, 3.5, 0.0>, 0.0 }
text { ttf "arial.ttf" "y" 0.1, 0.0 translate <-0.7, 3.2, 0.1> }

// z-Achse

cylinder { <0.0, 0.0, -3.5>, <0.0, 0.0, 3.0>, 0.05 }
cone { <0.0, 0.0, 3.0>, 0.12, <0.0, 0.0, 3.5>, 0.0 }
text { ttf "arial.ttf" "z" 0.1, 0.0 translate <0.3, 0.0, 3.8> }
Alle drei Koordinatenachsen

Wie macht sich eigentlich eine x-y-Ebene in diesem Koordinatensystem?
Im Folgenden wird eine Ebene (plane), die von den Achsen x und y aufgespannt wird, in das Koordinatensystem hineingelegt.
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Korrigierte Kameraeinstellungen
camera { location <3.2, 3.5, -6.0> look_at <0.0, 0.8, 0.0> }

// Lichtquelle
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
text { ttf "arial.ttf" "x" 0.1, 0.0 translate <3.4, -0.8, 0.1> }

// y-Achse

cylinder { <0.0, -3.5, 0.0>, <0.0, 3.0, 0.0>, 0.05 }
cone { <0.0, 3.0, 0.0>, 0.12, <0.0, 3.5, 0.0>, 0.0 }
text { ttf "arial.ttf" "y" 0.1, 0.0 translate <-0.7, 3.2, 0.1> }

// z-Achse

cylinder { <0.0, 0.0, -3.5>, <0.0, 0.0, 3.0>, 0.05 }
cone { <0.0, 0.0, 3.0>, 0.12, <0.0, 0.0, 3.5>, 0.0 }
text { ttf "arial.ttf" "z" 0.1, 0.0 translate <0.3, 0.0, 3.8> }

// x-y-Ebene

plane { <0.0, 0.0, 1.0>, 0.0 }
Koordinatensystem mit einer undurchsichtigen XY-Ebene

Die x-y-Ebene kann man dazu verwenden, die Skalierungsinformationen der x- sowie der y-Achse graphisch darzustellen. Dazu benötigt diese Ebene eine besondere, semitransparente Textur. Leider beeinflusst diese Textur die Rendergeschwindigkeit enorm — das Rendern erfolgt spürbar langsamer. :-(
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }

// Korrigierte Kameraeinstellungen
camera { location <3.2, 3.5, -6.0> look_at <0.0, 0.8, 0.0> }

// Lichtquelle
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }

// Default-Texture für jedes geometrische Objekt (hier knochige Farbe)
#default {
        texture {
                pigment { color rgb <1.0, 0.99, 0.95> }
                finish { ambient 0.41 }
        }
}

// x-Achse

cylinder { <-3.5, 0.0, 0.0>, <3.0, 0.0, 0.0>, 0.05 }
cone { <3.0, 0.0, 0.0>, 0.12, <3.5, 0.0, 0.0>, 0.0 }
text { ttf "arial.ttf" "x" 0.1, 0.0 translate <3.4, -0.8, 0.1> }

// y-Achse

cylinder { <0.0, -3.5, 0.0>, <0.0, 3.0, 0.0>, 0.05 }
cone { <0.0, 3.0, 0.0>, 0.12, <0.0, 3.5, 0.0>, 0.0 }
text { ttf "arial.ttf" "y" 0.1, 0.0 translate <-0.7, 3.2, 0.1> }

// z-Achse

cylinder { <0.0, 0.0, -3.5>, <0.0, 0.0, 3.0>, 0.05 }
cone { <0.0, 0.0, 3.0>, 0.12, <0.0, 0.0, 3.5>, 0.0 }
text { ttf "arial.ttf" "z" 0.1, 0.0 translate <0.3, 0.0, 3.8> }

// x-y-Ebene

plane {
        <0.0, 0.0, 1.0>, 0.0
        texture {
                pigment {
                        checker color rgbt <1.0, 0.99, 0.95, 0.9>,
                                color rgbt <1.0, 0.99, 0.95, 0.5>
                }
        }
}
Koordinatensystem mit einer XY-Ebene

Es bleibt Ihrem Ehrgeiz überlassen, weitere Ebenen hinzuzufügen.
Anmerkungen
Sie können sich auch aus dieser Vorlage ein eigenes Makro zusammenstellen und dieses zur Modellierung weiterer 3D-Objekte verwenden.

Wenn Sie die perspektivische Darstellung stören sollte, fügen Sie bei der Kamera einfach das Attribut orthographic hinzu.

Folgende Darstellung des POV-Ray-Koordinatensystems entstand mit Tinyray.
Tinyray-Szene stellt POV-Ray-Koordinaten dar.
Wenn Sie Glück haben, versteht Ihr Browser VRML-Dateien (3D-Szenen mit Virtual Reality Modeling Language) und ermöglicht Ihnen einen beeindruckenden Besuch in dieser kleinen Szene mit der Computer-Maus.
  1. POV-Ray-Koordinaten als VRML-Datei (41.238 Bytes)
Vorliegende VRML-Datei wurde nicht mit POV-Ray generiert, sondern mit der Tinyray-Anwendung UseVRMLCode.