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!
:-)
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 }
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 }
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> }
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> }
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> }
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> }
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 }
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>
}
}
}
Es bleibt Ihrem Ehrgeiz überlassen, weitere Ebenen hinzuzufügen.
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.
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.
- POV-Ray-Koordinaten als VRML-Datei (41.238 Bytes)
Vorliegende
VRML-Datei
wurde nicht mit
POV-Ray
generiert, sondern mit der
Tinyray-Anwendung
UseVRMLCode.