|
![](/i/fill.gif) |
A few days ago I discover the joy to make my own programming in Pov-Ray...
The scene bellow is used to create a tiled flood, it works very well but
when I want to makes it a "#macro" the things goes bad the macro doesn't
seem to work !
Here is....
The scene that works :
// Persistence of Vision Raytracer V3.1
// World definition file.
//
// Creating tiled floors with a macro...
// Z coordinate = up
background { color <0.500,0.600,0.800> }
camera { // Camera StdCam
location < 0.000, -15.000, 8.000>
sky < 0.00000, 0.00000, 1.00000> // Use right
handed-system
up < 0.0, 0.0, 1.0> // Where Z is up
right < 1.35836, 0.0, 0.0> // Right Vector is
adjusted to compensate for spherical (Moray) vs. planar (POV-Ray) aspect
ratio
angle 40.00000 // Vertical 30.000
look_at < 0.000, 0.000, 5.000>
}
//
// ******* L I G H T S *******
//
light_source { // Light1
<0.0, 0.0, 0.0>
color rgb <1.000, 1.000, 1.000>
translate <0.0, -20.0, 20.0>
}
#declare caro =
union {
box {<-1, -1, -1>, <1, 1, 1> scale <0.98, 1.0, 0.04> translate 0.04*z}
box {<-1, -1, -1>, <1, 1, 1> scale <1.0, 0.98, 0.04> translate 0.04*z}
box {<-1, -1, -1>, <1, 1, 1> scale <0.98, 0.98, 0.01> translate 0.09*z}
sphere {<0,0,0>,1 scale 0.02 translate <0.98, -0.98, 0.08>}
sphere {<0,0,0>,1 scale 0.02 translate <-0.98, -0.98, 0.08>}
sphere {<0,0,0>,1 scale 0.02 translate <0.98, 0.98, 0.08>}
sphere {<0,0,0>,1 scale 0.02 translate <-0.98, 0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate
<0.98, -0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate
<-0.98, -0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate <-0.98,
0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate <0.98,
0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate -90.0*x
translate <0.98, -0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate -90.0*x
translate <-0.98, -0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate <-90.0,
0.0, -90.0> translate <-0.98, -0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate <-90.0,
0.0, -90.0> translate <-0.98, 0.98, 0.08>}
texture {/*pigment {color rgb <0.2, 0.2, .8>}*/ finish {reflection 0.2
phong_size 10 phong 0.2}}
}
// number of tiles from left to right...
#declare X_max = 50;
// number of tiles front of the camera...
#declare Y_max = 60;
// randomize color and rotation (if rota = 1)
#declare Blue1 = seed(1);
#declare XY = seed(2);
#declare rota = 0;
// Preset colorsets...
#declare rnd_Red = pigment {color rgb <1- (rand(Blue1)/10), 0.2, 0.2>}
#declare rnd_Green = pigment {color rgb <0.2, 1- (rand(Blue1)/10), 0.2>}
#declare rnd_Blue = pigment {color rgb <0.2, 0.2, 1- (rand(Blue1)/10)>}
#declare rnd_Ivory = pigment {color rgb <0.9 - (rand(Blue1)/10), 0.9 -
(rand(Blue1)/10), 0.8 - (rand(Blue1)/10)>}
#macro TF(X_max, Y_max, )
// Create a tiled floor.
#declare carrelage = union {
#local StartY = 0;
#while (StartY <= Y_max - 1)
#local StartX = 0;
#while (StartX <= X_max - 1)
object {caro
// if rota enabled then randomly rotate the tiles
// along X and Y
#if (rota = 1)
rotate <1-(rand(XY)*2), 1-(rand(XY)*2), 0>
#end
//
translate <StartX*2.0, StartY*2.0, 0> pigment{rnd_Ivory}}
#declare StartX = StartX + 1;
#end
#declare StartY = StartY + 1;
#end
}
// Place the 'carrelage' at the origin axis '(0, 0, 0)'
object {carrelage translate (x*(-1.0*(X_max-1)))}
// End of the carrelage utilisation...
// Place the rest of the scene here...
sphere {<-3.5,13,1.02>1 pigment{rgb .2} finish{reflection 0.4}}
sphere {<0,14,2.02>2 pigment{rgb .2} finish{reflection 0.5}}
sphere {<3.5,13,1.02>1 pigment{rgb .2} finish{reflection 0.4}}
fog {
fog_type 1
distance 350
color rgb 1
}
And finaly the same scene with my 'trying-to-make-a-macro' macro that dont
work !!!
// Persistence of Vision Raytracer V3.1
// World definition file.
//
// Creating tiled floors with a macro...
// Z coordinate = up
background { color <0.500,0.600,0.800> }
camera { // Camera StdCam
location < 0.000, -15.000, 8.000>
sky < 0.00000, 0.00000, 1.00000> // Use right
handed-system
up < 0.0, 0.0, 1.0> // Where Z is up
right < 1.35836, 0.0, 0.0> // Right Vector is
adjusted to compensate for spherical (Moray) vs. planar (POV-Ray) aspect
ratio
angle 40.00000 // Vertical 30.000
look_at < 0.000, 0.000, 5.000>
}
//
// ******* L I G H T S *******
//
light_source { // Light1
<0.0, 0.0, 0.0>
color rgb <1.000, 1.000, 1.000>
translate <0.0, -20.0, 20.0>
}
#declare caro =
union {
box {<-1, -1, -1>, <1, 1, 1> scale <0.98, 1.0, 0.04> translate 0.04*z}
box {<-1, -1, -1>, <1, 1, 1> scale <1.0, 0.98, 0.04> translate 0.04*z}
box {<-1, -1, -1>, <1, 1, 1> scale <0.98, 0.98, 0.01> translate 0.09*z}
sphere {<0,0,0>,1 scale 0.02 translate <0.98, -0.98, 0.08>}
sphere {<0,0,0>,1 scale 0.02 translate <-0.98, -0.98, 0.08>}
sphere {<0,0,0>,1 scale 0.02 translate <0.98, 0.98, 0.08>}
sphere {<0,0,0>,1 scale 0.02 translate <-0.98, 0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate
<0.98, -0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate
<-0.98, -0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate <-0.98,
0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 0.08> translate <0.98,
0.98, 0.0>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate -90.0*x
translate <0.98, -0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate -90.0*x
translate <-0.98, -0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate <-90.0,
0.0, -90.0> translate <-0.98, -0.98, 0.08>}
cylinder {<0,0,1>, <0,0,0>, 1 scale <0.02, 0.02, 1.96> rotate <-90.0,
0.0, -90.0> translate <-0.98, 0.98, 0.08>}
texture {/*pigment {color rgb <0.2, 0.2, .8>}*/ finish {reflection 0.2
phong_size 10 phong 0.2}}
}
// number of tiles from left to right...
//#declare X_max = 50;
// number of tiles front of the camera...
//#declare Y_max = 60;
// randomize color and rotation (if rota = 1)
#declare Blue1 = seed(1);
#declare XY = seed(2);
//#declare rota = 0;
// Preset colorsets...
#declare rnd_Red = pigment {color rgb <1- (rand(Blue1)/10), 0.2, 0.2>}
#declare rnd_Green = pigment {color rgb <0.2, 1- (rand(Blue1)/10), 0.2>}
#declare rnd_Blue = pigment {color rgb <0.2, 0.2, 1- (rand(Blue1)/10)>}
#declare rnd_Ivory = pigment {color rgb <0.9 - (rand(Blue1)/10), 0.9 -
(rand(Blue1)/10), 0.8 - (rand(Blue1)/10)>}
// Create a tiled floor.
#macro TF(X_maxx, Y_maxx, rota, pig)
#declare X_max = X_maxx;
#declare Y_max = Y_maxx;
#declare carrelage = union {
#local StartY = 0;
#while (StartY <= Y_max - 1)
#local StartX = 0;
#while (StartX <= X_max - 1)
object {caro
// if rota enabled then randomly rotate the tiles
// along X and Y
#declare rotaa = rota;
#if (rota = 1)
rotate <1-(rand(XY)*2), 1-(rand(XY)*2), 0>
#end
//
translate <StartX*2.0, StartY*2.0, 0> pigment{pig}}
#declare StartX = StartX + 1;
#end
#declare StartY = StartY + 1;
#end
}
#end
// Place the 'carrelage' at the origin axis '(0, 0, 0)'
//object {carrelage translate (x*(-1.0*(X_max-1)))}
TF (50,60, 1, rnd_Ivory)
// End of the carrelage utilisation...
// Place the rest of the scene here...
sphere {<-3.5,13,1.02>1 pigment{rgb .2} finish{reflection 0.4}}
sphere {<0,14,2.02>2 pigment{rgb .2} finish{reflection 0.5}}
sphere {<3.5,13,1.02>1 pigment{rgb .2} finish{reflection 0.4}}
fog {
fog_type 1
distance 350
color rgb 1
}
I dont really understand whats going on !
Post a reply to this message
|
![](/i/fill.gif) |