Besonders bei der Entwicklung der Schachfiguren kommt die
CSG-Technik
(Constructive Solid Geometry)
zur Geltung.
Das heißt, dass Schlüsselwörter wie
union
und
difference
sinnvoll zum Einsatz kommen.
Beispielsweise stellt eine Schachfigur eine Vereinigung
(union)
von Kopf, Körper und Fuß dar.
Dies hat den Vorteil, dass beim Verschieben
(translate)
der Schachfigur nicht explizit jeder einzelne Teil der Schachfigur verschoben werden muss.
Eine Verschiebung der Schachfigur wird als einzelne Verschiebung der Vereinigung der Figurteile umgesetzt.
Von einer Form kann auch eine andere Form abgezogen
(difference)
werden.
Um aber mit der Entwicklung der Schachfiguren anfangen zu können,
benötigt man erst einmal eine simple Entwicklungsszene
(hier develop.pov).
// Grauer Hintergrund
background { color rgb <0.5, 0.5, 0.5> }
// Kamera (ohne perspektivische Sicht)
camera { orthographic location <0.0, 1.5, -3.2> look_at <0.0, 1.5, 0.0> }
// Weiße Lichtquelle
light_source { <6.0, 8.0, -8.0> color rgb <1.0, 1.0, 1.0> }
// Default-Textur (hier knochige Farbe)
#default {
texture {
pigment { color rgb <1.0, 0.99, 0.95> }
finish { ambient 0.41 }
}
}
Diese Entwicklungsszene wird im Folgenden für jeden Figurentyp herhalten.
So erscheint jede einzelne Figur in gleichem Licht und in gleicher Farbe;
die Kameraeinstellungen sowie die Hintergrundfarbe bleiben unverändert.
Mithilfe dieser Entwicklungsszene kann man sich bei der Schachfigurenentwicklung
erst einmal nur auf die Formgebung der einzelnen Figurentypen konzentrieren.
Der
Bauer
(Pawn)
ist wohl am einfachsten zu entwickeln.
Er benötigt eigentlich nur einen simplen Kopf
(sphere),
einen simplen Körper
(cone)
und einen simplen Fuß
(torus).
Mit dieser Figur kann man schon einmal die Grundproportionen festlegen.
#declare Pawn = union {
// Head
sphere { <0.0, 1.5, 0.0>, 0.5 }
// Body
cone { <0.0, 0.1, 0.0>, 0.6, <0.0, 1.3, 0.0>, 0.2 }
// Foot
torus { 0.6, 0.1 translate <0.0, 0.1, 0.0> }
}
Diese Deklaration führt noch zu keinem
3D-Resultat.
Erst mit der anfangs eingeführten Entwicklungsszene erhält man eine brauchbare
3D-Darstellung
des Bauern
(develop.pawn.pov).
Dies gilt auch für die anderen Figuren.
include "develop.pov"
include "pawn.pov"
Pawn
Der
König
(King)
wird mit einem Kreuz auf dem Kopf dargestellt.
Um die Wichtigkeit des Königs gegenüber den Leichtfiguren hervorzuheben,
bekommt sein Körper noch einen zusätzlichen Ring
(torus).
#declare King = union {
// Head
sphere { <0.0, 1.7, 0.0>, 0.65 }
// Königskreuz
union {
box { <-0.1, -0.3, -0.1>, <0.1, 0.3, 0.1> }
box { <-0.3, -0.1, -0.1>, <0.3, 0.1, 0.1> }
translate <0.0, 2.6, 0.0>
}
// Body
cone { <0.0, 0.1, 0.0>, 0.8, <0.0, 1.2, 0.0>, 0.3 }
torus { 0.5, 0.1 translate <0.0, 0.7, 0.0> }
// Foot
torus { 0.8, 0.1 translate <0.0, 0.1, 0.0> }
}
Die
Dame
(Queen),
die stärkste Figur auf dem Brett,
bekommt eine diademähnliche Krone auf ihren Kopf.
Ihre Stärke wird ebenfalls mit einem zusätzlichen Ring um den Körper ausgedrückt.
#declare Queen = union {
// Head
sphere { <0.0, 1.7, 0.0>, 0.65 }
// Diademähnliche Krone
difference {
cone { <0.0, 1.95, 0.0>, 0.55, <0.0, 2.7, 0.0>, 0.8 }
cone { <0.0, 1.8, 0.0>, 0.0, <0.0, 2.8, 0.0>, 0.8 }
union {
cylinder { <-2.0, 3.3, 0.0>, <2.0, 3.3, 0.0>, 0.85 }
cylinder { <0.0, 3.3, -2.0>, <0.0, 3.3, 2.0>, 0.85 }
rotate <0.0, 45.0, 0.0>
}
}
// Body
cone { <0.0, 0.1, 0.0>, 0.8, <0.0, 1.2, 0.0>, 0.3 }
torus { 0.5, 0.1 translate <0.0, 0.7, 0.0> }
// Foot
torus { 0.8, 0.1 translate <0.0, 0.1, 0.0> }
}
Üblicherweise sieht der
Läufer
(Bishop)
beinahe so aus wie der Bauer,
jedoch mit drei kleinen Unterschieden.
Der Kopf des Läufers ist länglich, der des Bauern hingegen nicht.
Außerdem bekommt dieser Kopf einen rechteckigen, schrägen Einschnitt
(difference)
und einen kleinen Bommel.
#declare Bishop = union {
// Head
// Der Bommel
sphere { <0.0, 2.6, 0.0>, 0.15 }
difference {
sphere {
<0.0, 1.5, 0.0>, 1.0
scale <0.6, 1.0, 0.6>
}
// Rechteckiger, schräger Einschnitt
box {
<0.0, 0.0, -1.0>, <0.2, 1.0, 1.0>
rotate <0.0, 0.0, -20.0>
translate <0.0, 1.5, 0.0>
}
}
// Body
cone { <0.0, 0.1, 0.0>, 0.8, <0.0, 1.2, 0.0>, 0.2 }
// Foot
torus { 0.8, 0.1 translate <0.0, 0.1, 0.0> }
}
Lange habe
ich
darüber nachgedacht, ob ich dem
Turm
(Rook)
einen quadratischen Grundriss geben soll oder nicht.
Schließlich kam ich zu dem Schluss, dass dies einen zu extremen Stilbruch geben würde.
Deshalb blieb ich auch hier bei einem kreisrunden Grundriss.
Um die Charakteristik des Turmes besser hervorzuheben, bekommt er
— ähnlich wie der Läufer —
noch einen rechteckigen Einschnitt
(difference)
im Kopfteil.
#declare Rook = union {
// Head
difference {
cone { <0.0, 1.3, 0.0>, 0.7 <0.0, 2.3, 0.0>, 0.8 }
cone { <0.0, 1.9, 0.0>, 0.5 <0.0, 2.9, 0.0>, 0.6 }
box { <-0.2, 2.0, -1.0>, <0.2, 2.4, 1.0> }
}
// Body
cone { <0.0, 0.1, 0.0>, 0.8, <0.0, 1.6, 0.0>, 0.5 }
// Foot
torus { 0.8, 0.1 translate <0.0, 0.1, 0.0> }
}
Die wohl am schwersten zu entwickelnde Schachfigur dürfte der
Springer
(Knight)
sein.
Körper und Fuß bleiben wie gehabt
— die gesamte Komplexität bleibt am Kopf hängen.
Dieser wird durch einen großen Zylinder begrenzt, von dem alles Nötige abgezogen
(difference)
wird.
#declare Knight = union {
// Head
difference {
cylinder { <0.0, 0.0, -0.4>, <0.0, 0.0, 0.4>, 1.2 }
cylinder { <0.0, 0.0, 0.3>, <0.0, 0.0, 0.5>, 1.0 }
cylinder { <0.0, 0.0, -0.5>, <0.0, 0.0, -0.3>, 1.0 }
plane { <3.0, 1.0, 0.0>, -0.5 }
box {
<-2.0, 0.0, -1.0>, <-0.5, -2.0, 1.0>
rotate <0.0, 0.0, -70.0>
scale <0.9, 1.5, 1.0>
}
box {
<-0.2, 0.0, -1.0>, <1.3, -2.0, 1.0>
rotate <0.0, 0.0, -85.0>
scale <0.5, 1.0, 1.0>
}
rotate <0.0, 0.0, -10.0>
translate <-0.3, 1.3, 0.0>
}
// Body
cone { <0.0, 0.1, 0.0>, 0.8, <0.0, 1.2, 0.0>, 0.3 }
// Foot
torus { 0.8, 0.1 translate <0.0, 0.1, 0.0> }
}
Zur Kontrolle sollte man sich noch einmal alle Schachfiguren
(pieces)
anzeigen lassen, um beispielsweise visuell prüfen zu können,
ob die Größen und Proportionen richtig gewählt wurden.
include "develop.pov"
include "king.pov"
include "queen.pov"
include "bishop.pov"
include "knight.pov"
include "rook.pov"
include "pawn.pov"
union {
object { King }
object { Queen translate <3.0, 0.0, 0.0> }
object { Bishop translate <6.0, 0.0, 0.0> }
object { Knight translate <9.0, 0.0, 0.0> }
object { Rook translate <12.0, 0.0, 0.0> }
object { Pawn translate <15.0, 0.0, 0.0> }
translate <-7.5, 5.0, 0.0>
scale 0.24
}
Da nun die Deklarationen der einzelnen Figurentypen vorliegen,
kann mit der Entwicklung verschiedener Schachszenen begonnen werden.