In POVRAY können Entities durch die #declare - Klausel
vereinbart werden. Diese Objekte werden nicht dargestellt. Sie
können aber durch den vereinbarten Begriff mehrfach wiederholt werden.
Obwohl das #declare dem C- #define sehr ähnlich
ist, werden sie dennoch verschiedenartig benutzt. Man beachte, daß
die Bezeichnung des vereinbarten Entities wiederholt werden muß. Wird
eine Primitive benutzt, so muß das Wort object vorangestellt
werden.
/* .................*/
#declare text1 = texture {
pigment {
color rgb <1, 0, 0>
}
finish {
phong 0.9
}
}
#declare Kasten = box {
<-0.4, -0.4, -0.4>, <0.4, 0.4, 0.4>
texture {text1}
}
cylinder {
<0, -2, 0>, <0, 2, 0>, 0.2
texture {
pigment {
color rgb <1, 1, 0>
}
finish {
phong 0.9
}
}
}
object {Kasten}
| ![]() |
Da es keinen Sinn macht, einen Körper an ein und derselben Stelle zu wiederholen, muß man über ihn Operationen ausführen. Das sind die Verschiebung (translate), die Drehung (rotate) und die Skalierung (scale). Bei der Translation wird der Vektor angebenen, entlang dem der Körper verschoben werden soll. Bei der Drehung werden die Drehwinkel (im Grad-Maß) in der Reihenfolge X, Y, Z angegeben. Bei der Skalierung wird der Skalierungsfaktor in X-, Y- und Z-Richtung angegeben.
/*..............*/
#declare Kasten = box {
<-0.4, -0.4, -0.4>, <0.4, 0.4, 0.4>
texture {
pigment {
color rgb <1, 0, 0>
}
finish {
phong 0.9
}
}
}
cylinder {
<0, -2, 0>, <0, 2, 0>, 0.2
texture {
pigment {
color rgb <1, 1, 0>
}
finish {
phong 0.9
}
}
}
object {Kasten}
object {Kasten translate <2, 1, 0>}
object {Kasten scale <1.2, 2.0, 1.0>
translate <-2, 1, 0>}
| ![]() |
Die Operationen lassen sich beliebig kombinieren:
/* ............. */
#declare Kasten = box {
<-0.4, -0.4, -0.4>, <0.4, 0.4, 0.4>
texture {
pigment {
color rgb <1, 0, 0>
}
finish {
phong 0.9
}
}
}
cylinder {
<0, -2, 0>, <0, 2, 0>, 0.2
texture {
pigment {
color rgb <1, 1, 0>
}
finish {
phong 0.9
}
}
}
object {Kasten}
object {Kasten translate <2, 0, 0>
rotate <0, 45, 30>}
object {Kasten scale <1.2, 2.0, 1.0>
translate <-2, 1, 0>
rotate <0, 45, 30>}
| ![]() |
Achtung! Bei diesen Operationen handelt es sich um Matrix-Operationen und diese sind nicht kommutativ! Eine Verschiebung mit anschließender Drehung ...
/* ................ */
#declare L = 0.4
#declare H = 0.2
#declare B = 0.3
#declare Kasten = box {<-L, 0.1, -B>,
<L, 0.1 + 2 * H, B>}
object {Kasten texture {Rot}}
object {Kasten texture {Rot}
translate <2, 0, 0>
rotate <0, 0, 45>
}
| ![]() |
/* .............. */
#declare L = 0.4
#declare H = 0.2
#declare B = 0.3
#declare Kasten = box {<-L, -H, -B>,
< L, H, B>}
object {Kasten texture {Rot}}
object {Kasten texture {Rot}
rotate <0, 0, 45>
translate <2, 0, 0>
}
| ![]() |