/* Standard Includes */ #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "TapeSpool.POV" #include "Speaker.POV" #include "3/8 Inch Audio Plug.POV" #include "Buttons.POV" #include "RoundRect1.POV" #include "RoundRect2.POV" #include "Caption.POV" /* The overall texture of the stereo */ #declare stdDeckTexture = texture{ pigment{color Gray10} finish{Dull } //reflection .2 roughness .5} } /* A couple of rounded boxes, no sharp edges */ #declare wholeButtonDeck = object{RoundRect1} #declare cassRoundBox = object{RoundRect2} /* The lowest level of the stereo, here just with cut-outs for the buttons and labels over the places where the buttons will go, "Play, Pause, Stop" etc...*/ #declare deck1 = difference{ object{wholeButtonDeck translate<-12.5,2.5,25> scale <80/25,1,1> texture{stdDeckTexture} /* Over the standard deck texture is an image map for the labels. Index 255 is transparent, so you see the deck texture around the letters. */ texture{ pigment{ // texture pigment {} attribute // create a texture that lays an image's colors onto a surface // image maps into X-Y plane from <0,0,0> to <1,1,0> image_map { gif "bold buttons.gif" // the file to read (iff/gif/tga/dump/pot) map_type 0 // 0=planar, 1=spherical, 2=cylindrical, 5=torus interpolate 2 // 0=none, 1=linear, 2=bilinear, 4=normalized distance // [filter N V] // N=all or color index # (0ÉN), V= value (0.0...1.0) filter 0 0.0 filter 255 1.0 // [use_color | use_index] once } // image_map translate<-1,0,0> scale<59,1,1> translate <-10,4,0> } } }// object box{<-35,4,-1><-10,-1,4> pigment{color Mica}} box{<-70,4,-1><-45,-1,4> pigment{color Mica}} } /* A shape which will carve the hole for the headphone plug out of the lowest level of the stereo */ #declare phoneHole = union{ cylinder{<-5,2,0> <-5,2,10> .8 texture{stdDeckTexture}} sphere{<0,0,0> 2 scale <2.294,1.147,1> translate<-5,2,-1.8> texture{stdDeckTexture}} } /* Okay, carve the hole for the headphone plug */ #declare deck2 = difference{ object{deck1} object{phoneHole} } /* This is the actual "receptacle" for the headphone plug, a hollow open-ended cylinder with a lip */ #declare jack = difference{ cylinder{<-5,2,0> <-5,2,10> .8} cone{<-5,2,-.1> .65 <-5,2,.2> .5} cylinder{<-5,2,.19> < -5,2,10> .5} pigment{Gray10} finish{Shiny} } /* Install the jack */ #declare deck3 = union{ object{deck2} object{jack} } /* Put the buttons on. Buttons are defined in Buttons.POV */ #declare deck4 = union{ object{deck3} object{pauseButton translate <-12.1,4,2> texture{stdDeckTexture}} object{windButton translate <-16.3,4,2> texture{stdDeckTexture}} object{rewindButton translate <-20.5,4,2> texture{stdDeckTexture}} object{playButton rotate<-15,0,0>translate <-26.7,4,2> texture{stdDeckTexture}} object{stopButton translate <-32.9,4,2> texture{stdDeckTexture}} object{pauseButton translate <-47.1,4,2> texture{stdDeckTexture}} object{windButton translate<-51.3,4,2> texture{stdDeckTexture}} object{rewindButton translate<-55.5,4,2> texture{stdDeckTexture}} object{playButton translate <-61.7,4,2> texture{stdDeckTexture}} object{stopButton translate <-67.9,4,2> texture{stdDeckTexture}} } /* A foot on the bottom, so you don't scratch the table */ #declare foot = union{ difference{ cylinder{<0,0,0> <0,-2,0> 4} difference{ cylinder{<0,-.9,0> <0,-1.6,0> 5} cylinder{<0,-.8,0> <0,-1.7,0> 3.9} } pigment{Gray20} finish{Dull ambient .6} } cylinder{<0,-1.15,0> <0,-1.35,0> 4 pigment{Mica} finish{Shiny}} scale <1,.5,1> } /* Put a foot on each of the 4 corners, */ #declare deck5 = union{ object{deck4} object{foot translate<-4,0,4>} object{foot translate<-76,0,4>} object{foot translate <-4,0,46>} object{foot translate <-76,0,46>} bounded_by{box{<-80,5,50><0,-1.5,0>}} } /* A black spacer between the lowest level and the one above */ #declare spacer = box{<-79,5,1><-1,6,49> pigment{Mica} finish{Shiny}} /* A plain rounded box for the second level, where the tapes go in */ #declare plainCass = object{cassRoundBox translate<0,6,0>} /* A Clear rounded box for a window into the tape mechanism */ #declare clearRoundBox = object{cassRoundBox scale<28/80,4/20,.25/50> translate <0,0,-.125>} /* Put the space and plain cassete box on the lowest level */ #declare deck6 = union{ object{deck5} object{spacer} object{plainCass texture{stdDeckTexture} texture{ pigment{ image_map{ gif "Deck Labels.gif" interpolate 2 once map_type 0 filter 0 0 filter 255 1.0 } } translate<-1,0,0> scale<75,3,1> translate <5,10,0> } } } /* A dent to carve out of the second level wherein the window will sit */ #declare glassHole = object{clearRoundBox scale <1,1.1,.5> texture{stdDeckTexture}} /* The actual window, scaled and given texture */ #declare tapeGlass = object{clearRoundBox scale <27.9/29,1,1> pigment{color Clear} finish{reflection .3 roughness .1}} /* Make a long box which is the space inside where a tape would sit. There are two tape decks, but one double-length hole works, since we can't see inside too well anyway. */ #declare deck7 = difference{ object{deck6} box{<-78,7,.1><-2,25,3> pigment{color Mica}} // for the tapes to go in } /* Carve out the dent for the windows */ #declare deck8 = difference{ object{deck7} object{glassHole scale <1,1,1> translate<-2,17,0>} object{glassHole scale <1,1,1> translate<-49,17,0>} } /* Put the glass in, after making holes so we can see through to the inside. */ #declare deck9 = union{ difference{ object{deck8} object{tapeGlass scale <1,1,2.5> translate<-3.1,17,0>} object{tapeGlass scale <1,1,2.5> translate<-49,17,0>} } object{tapeGlass translate<-3.1,17,0>} object{tapeGlass translate<-49,17,0>} } /* Carve some grooves to look like hinges and seams and such */ #declare deck10 = difference{ object{deck9} box{<-77.1,8.1,5><-76.9,26,-1>} box{<-40.1,8.1,5><-39.9,26,-1>} box{<-3.1,8.1,5><-2.9,26,-1>} box{<-85,7.8,-1><1,8.2,5>} } /* A "spark" coming from the jack to the plug. */ disc { <0, 0, 0> x, 2.0 finish{ambient 1} pigment{radial turbulence .3 color_map{ [0 color Clear] [0.235 color Clear] [0.24 color White filter .6] [0.25 color White filter .6] [0.255 color NeonBlue filter .6] [0.26 color NeonBlue filter .6] [0.265 color White filter .6] [0.27 color White filter .6] [0.275 color Clear] [1 color Clear] } rotate<-90,0,0> rotate<0,90,0> scale 5 translate<0,5,0>} rotate<90,0,0> translate<-5,1.5,0> no_shadow bounded_by{sphere{<-5,1.5,0> 2}} } /* A flash of light from the spark onto the stereo */ light_source { 0*x // light's position (translated below) color NeonBlue // light's color spotlight // this kind of light source translate <-5, 2, -2> // position of light point_at <-5, 2, 0> // direction of spotlight radius 80 // hotspot (inner, in degrees) tightness 10 // (1...100) lower is softer, higher is tighter falloff 170 // intensity falloff radius (outer, in degrees) } /* A flash of light from the spark onto the floor */ light_source { 0*x // light's position (translated below) color NeonBlue // light's color spotlight // this kind of light source translate <-5, 2, -1> // position of light point_at <-5, 0, -1> // direction of spotlight radius 80 // hotspot (inner, in degrees) tightness 10 // (1...100) lower is softer, higher is tighter falloff 170 // intensity falloff radius (outer, in degrees) } /* The round box for the topmost level */ #declare topBox1 = object{cassRoundBox texture{stdDeckTexture} translate<0,27,0>} /* A volume knob with a red pointer and white increments around */ #declare volKnob = union{ difference{ cylinder{<0,0,4><0,0,-2> 5} cylinder{<1.5,0,-2.1> <4,0,-2.1> .3} texture{stdDeckTexture} } cylinder{<1.6,0,-2><3.9,0,-2> .2 pigment{color Red filter .8} finish{Shiny ambient .6}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,18> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,36> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,54> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,72> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,90> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,108> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,126> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,144> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,162> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,180> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,198> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,216> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,231> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,252> pigment{color White filter .6} finish{Shiny}} cylinder{<5.2,0,0> <6.2,0,0> .2 rotate <0,0,270> pigment{color White filter .6} finish{Shiny}} } /* A power button, actually, just a sort of clicky button. Beveled top, square footprint. */ #declare powerButton = union{ intersection{ plane{-y,-1} plane{y,1.5} plane{-x,0 rotate<0,0,-30> translate<-2,0,0> rotate<0,90,0>} plane{-x,0 rotate<0,0,-30> translate<-2,0,0> rotate<0,180,0>} plane{-x,0 rotate<0,0,-30> translate<-2,0,0> rotate<0,270,0>} plane{-x,0 rotate<0,0,-30> translate<-2,0,0>} } box{<-1.5,1,-1.5><1.5,0,1.5>} rotate<-90,0,0> texture{stdDeckTexture} } /* Carve a dent out of the top deck. Dent is Shiny black inside, and image-mapped with a graphic equalizer lighted display. Also, add the power button and the volume knob */ #declare topBox2 = union{ difference{ object{topBox1 texture{stdDeckTexture}} box{<-60,30,-1> <-35,40,.4> texture{pigment{Gray05} finish{Shiny}} texture{ pigment{ image_map{ gif "EQ.GIF" map_type 0 interpolate 2 filter 0 0.0 filter 16 0.0 filter 255 1.0 once } // image mape translate<-1,0,0> scale <25,10,1> translate<-35,30,0> }//pigment finish{ ambient .6} }// texture }//box }//difference object{volKnob translate<-15,35,0>} object{powerButton translate<-74,35,.5>} } /* Carve a dent above the power button and inside put a little green power light */ #declare topBox3 = union{ difference{ object{topBox2} box{<-73.6,36.9,-.1><-74.4,38.1,.1> pigment{color Mica}} } box{<-73.7,37,0><-74.3,38,.1> pigment{color MediumSpringGreen} finish{ambient .7}} } /* Add the top layer to the bottom ones and add some tape-spool looking doohickies in the tape mechanism. They are defined in TapeSpool.POV */ #declare deck11 = union{ object{deck10} object{topBox3} object{spacer translate <0,21,0>} object{tapeSpool rotate<0,0,25> translate<-25,19,2>} object{tapeSpool rotate<0,0,15> translate<-9.1,19,2>} object{tapeSpool rotate <0,0,63> translate<-55,19,2>} object{tapeSpool rotate <0,0,70> translate<-70.9,19,2>} } /* Add a pair of big speakers (from "Speakers.POV") */ #declare stereo = union{ object{deck11 bounded_by{box{<-80,-1.5,-2><0,47,50>}}} object{speaker translate <-82,-1,0> } object{speaker translate<52,-1,0>} } /* Instantiate the stereo */ object{stereo} /* Instantiate the plug, about to be plugged in */ object{plug rotate<90,0,0> scale .6 translate <-5,2,-2>} /* Instantiate the caption */ object{caption scale .4 rotate<0,-90,0> translate<-15,3,-2> } camera{location<5-clock,5,-20> look_at<-15+clock,7,-3>} //camera{location<-45,30,-20> look_at<-45,30,0>} //camera{location rotate<0,0,clock*72> // translate<0,20,-50+clock*4> look_at<-80+clock*8,40,0> light_source{<-40,40,-40> color White} light_source{<40,40,-40> color White} /* The room.... Pretty fancy, eh? */ box{<-200,200,-200> <200,-1,200> texture{Stone9}} --------- Cut here ------- Follows is file TapeSpool.POV -------- #declare Arc45 = intersection{ difference{ cylinder{<0,0,-1><0,0,1> 4} cylinder{<0,0,-2><0,0,2> 2} } box{<0,0,-2><10,10,2> rotate<0,0,-45> scale <1,.4,1>}// scale <1,.5412,1>} } #declare tapeHole = union{ cylinder{<0,0,-1><0,0,1> 1} object{Arc45} object{Arc45 rotate<0,0,90>} object{Arc45 rotate<0,0,180>} object{Arc45 rotate<0,0,270>} } #declare tapeSpool = difference{ cylinder{<0,0,-.5><0,0,0> 5 texture{Spun_Brass scale 3}} object{tapeHole} } ------ Cut Here ----------- Follows is file Speaker.POV ---------- #declare speaker = union{ difference{ box{<0,0,0><-50,100,50>} cylinder{<-25,25,-1> <-25,25,49> 20} cylinder{<-25,70,-1><-25,70,49> 10} texture{DMFDarkOak scale 5 rotate<90,15,0> translate <0,0,100>}  } // Woofer torus{19,1 rotate<90,0,0> translate<-25,25,0> pigment{Mica} finish{Dull}} cone{<-25,25,0> 19 <-25,25,10> 0 clipped_by{box{<-6,6,.1><-44,44,20>}} pigment{color Mica} finish{Dull}} sphere{<-25,25,10> 4 texture{Chrome_Metal}} //Squawker torus{9,1 rotate<90,0,0> translate<-25,70,0> pigment{Mica} finish{Dull}} cone{<-25,70,0> 9 <-25,70,5> 0 clipped_by{box{<-15,80,.1><-35,60,5>}} pigment{color Mica} finish{Dull}} sphere{<-25,70,5> 3 texture{Chrome_Metal}} bounded_by{box{<0,0,-1><-50,100,50>}} } ------- Cut Here --------------- Follows is file 3/8 Inch Audio Plug.POV ---- #declare plug1 = merge{ cone{<0,0,0> .2 <0,-1,0> 1} cone{<0,-1,0> 1 <0,-1.8,0> .5} texture{Gold_Metal} } #declare plug2 = merge{ cone{<0,-1.8,0> .5 <0,-2.4,0> 1} cylinder{<0,-2.4,0> <0,-2.6,0> 1} texture{Gold_Metal} } #declare plug3 = cylinder{<0,-2.6,0> <0,-3.3,0> 1 pigment{color Green} finish{Shiny}} #declare plug4 = cylinder{<0,-3.3,0> <0,-5,0> 1 texture{Gold_Metal}} #declare plug5 = cylinder{<0,-5,0> <0,-5.7,0> 1 pigment{color Green} finish{Shiny}} #declare plug6 = cylinder{<0,-5.7,0> <0,-10,0> 1 texture{Gold_Metal}} #declare plug7 = merge{ cone{<0,-10,0> 1 <0,-10.2,0> 1.2} cylinder{<0,-10.2,0> <0,-11.3,0> 1.2} cone{<0,-11.3,0> 1.2 <0,-11.5,0> 1.4} texture{Gold_Metal} } #declare plug8 = difference{ cylinder{<0,-11.5,0> <0,-12.5,0> 1.4} cylinder{<0,-12.1,0> <0,-13,0> 1.35} // texture normal {} attribute // create a texture that has a bumpiness corresponding to color index // image maps into X-Y plane from <0,0,0> to <1,1,0> texture{Gold_Metal normal{ bump_map { // uses image color or index as bumpiness gif "Ribs.gif" // the file to read (iff/gif/tga/dump/pot) map_type 2 // 0=planar, 1=spherical, 2=cylindrical, 5=torus interpolate 2 // 0=none, 1=linear, 2=bilinear, 4=normalized distance use_color // [once] bump_size 3 // 0É3 } // bump_map scale 20 } //normal }//texture } #declare meshBox = union{ box{<-10,0,-10><-.25,-.25,10>} box{<.25,0,-10><10,-.25,10>} } #declare wireCase = difference{ cone{<0,0,0> 1.4 <0,-4,0> .65} cone{<0,0,0> 1.0 <0,-4,0> .25} object{meshBox translate <0,-.5,0>} object{meshBox translate <0,-1,0> rotate <0,90,0>} object{meshBox translate <0,-1.5,0>} object{meshBox translate <0,-2,0> rotate <0,90,0>} object{meshBox translate <0,-2.5,0>} object{meshBox translate <0,-3,0> rotate <0,90,0>} object{meshBox translate <0,-3.5,0>} } #declare plug9 = union{ cylinder{<0,-12.5,0> <0,-16,0> 1.4 pigment{color Gray10} finish{Shiny}} object{wireCase translate<0,-16,0> pigment{color Gray10} finish{Shiny}} cylinder{<0,-16,0> <0,-100,0> .25} } #declare plug1_9 = merge{ object{plug1} object{plug2} object{plug3} object{plug4} object{plug5} object{plug6} object{plug7} object{plug8} object{plug9} } #declare plug = difference{ object{plug1_9} cylinder{<0,-8,0> <0,-13,0> .5} bounded_by{ union{ cylinder{<0,0,0> <0,-10,0> 1} cylinder{<0,-10,0> <0,-11.3,0> 1.2} cylinder{<0,-11.3,0> <0,-20,0> 1.4} cylinder{<0,-20,0> <0,-100,0> .25} } } } -------- Cut Here --------------- Follows is file Buttons.POV ------- #declare stopStamp = difference{ box{<-.25,-.25,-1> <.25,.25,1>} box{<-.2,-.2,-2><.2,.2,2>} } #declare pauseStamp = union{ difference{ box{<-.25,-.25,-1><-.05,.25,1>} box{<-.2,-.2,-2><-.1,.2,2>} } difference{ box{<.05,-.25,-1><.25,.25,1>} box{<.1,-.2,-2><.2,.2,2>} } } #declare triPrism = intersection{ plane{y, 1} plane{y, 1 rotate<0,0,120>} plane{y, 1 rotate <0,0,240>} plane{z, 1} plane{-z, 1} } #declare playStamp = difference{ object{triPrism rotate<0,0,-30>} object{triPrism rotate<0,0,-30> scale<.75,.75,1.2>} scale <.6,.3,1> } #declare windStamp = union{ object{playStamp} object{playStamp translate<2,0,0>} translate<-1,0,0> scale<.5,1,1> } #declare rewindStamp = object{windStamp rotate<0,0,180>} #declare plainButton = union{ intersection{ difference{ cylinder{<-2,-4,0> <2,-4,0> 4} cylinder{<-3,-4,0> <3,-4,0> 3.3} } box{<-2.25,-4,0> <2.25,0,-4>} } cylinder{<-2,-4,-4> <2,-4,-4> .35} scale<1,1,.5> } #declare stopButton = difference{ object{plainButton} difference{ object{stopStamp scale 2 translate<0,-2,-1.5>} object{plainButton} translate<0,0,.2> } } #declare pauseButton = difference{ object{plainButton} difference{ object{pauseStamp scale 2 translate<0,-2,-1.5>} object{plainButton} translate<0,0,.2> } } #declare playButton = difference{ object{plainButton scale <2,1,1>} difference{ object{playStamp translate<0,-2,-1.5>} object{plainButton} translate<0,0,.2> } } #declare windButton = difference{ object{plainButton} difference{ object{windStamp translate<0,-2,-1.5>} object{plainButton} translate<0,0,.2> } } #declare rewindButton = difference{ object{plainButton} difference{ object{rewindStamp translate<0,-2,-1.5>} object{plainButton} translate<0,0,.2> } } ------- Cut Here ------------- Follows is file RoundRect1.POV -------- //Rounded corner rectangle. Fully rounded, like a melted ice cube. //Created using the program Create POV Round Box, by Michael C. Whidden. //This box is 25.000000 wide, 5.000000 tall, // 50.000000 deep with corners of radius 0.500000. //It is *base-centered* on the origin #declare RoundRect1 = union{ box{<12.000000,-2.500000,24.500000><-12.000000,2.500000,-24.500000>} box{<12.000000,-2.000000,25.000000><-12.000000,2.000000,-25.000000>} box{<12.500000,-2.000000,24.500000><-12.500000,2.000000,-24.500000>} cylinder{<12.000000,-2.000000,-24.500000> <12.000000,2.000000,-24.500000> 0.500000} cylinder{<-12.000000,-2.000000,24.500000> <-12.000000,2.000000,24.500000> 0.500000} cylinder{<-12.000000,-2.000000,-24.500000> <-12.000000,2.000000,-24.500000> 0.500000} cylinder{<12.000000,-2.000000,24.500000> <12.000000,2.000000,24.500000> 0.500000} cylinder{<12.000000,-2.000000,24.500000> <-12.000000,-2.000000,24.500000> 0.500000} cylinder{<12.000000,-2.000000,-24.500000> <-12.000000,-2.000000,-24.500000> 0.500000} cylinder{<12.000000,2.000000,24.500000> <-12.000000,2.000000,24.500000> 0.500000} cylinder{<12.000000,2.000000,-24.500000> <-12.000000,2.000000,-24.500000> 0.500000} cylinder{<-12.000000,2.000000,24.500000> <-12.000000,2.000000,-24.500000> 0.500000} cylinder{<12.000000,2.000000,24.500000> <12.000000,2.000000,-24.500000> 0.500000} cylinder{<-12.000000,-2.000000,24.500000> <-12.000000,-2.000000,-24.500000> 0.500000} cylinder{<12.000000,-2.000000,24.500000> <12.000000,-2.000000,-24.500000> 0.500000} sphere{<12.000000,2.000000,24.500000> 0.500000} sphere{<-12.000000,2.000000,24.500000> 0.500000} sphere{<12.000000,-2.000000,24.500000> 0.500000} sphere{<-12.000000,-2.000000,24.500000> 0.500000} sphere{<12.000000,2.000000,-24.500000> 0.500000} sphere{<-12.000000,2.000000,-24.500000> 0.500000} sphere{<12.000000,-2.000000,-24.500000> 0.500000} sphere{<-12.000000,-2.000000,-24.500000> 0.500000} bounded_by{box{<12.600000,2.600000,25.100000> <-12.600000,-2.600000,-25.100000>}} }//End object wholeButtonDeck --------- Cut Here ---------- Follows is file RoundRect2.POV ---------- //Rounded corner rectangle. Fully rounded, like a melted ice cube. //Created using the program Create POV Round Box, by Michael C. Whidden. //This box is 25.000000 wide, 20.000000 tall, // 50.000000 deep with corners of radius 0.500000. //It is *base-centered* on the origin #declare RoundRect2 = merge{ box{<12.000000,-10.000000,24.500000> <-12.000000,10.000000,-24.500000>} box{<12.000000,-9.500000,25.000000> <-12.000000,9.500000,-25.000000>} box{<12.500000,-9.500000,24.500000> <-12.500000,9.500000,-24.500000>} cylinder{<12.000000,-9.500000,-24.500000> <12.000000,9.500000,-24.500000> 0.500000} cylinder{<-12.000000,-9.500000,24.500000> <-12.000000,9.500000,24.500000> 0.500000} cylinder{<-12.000000,-9.500000,-24.500000> <-12.000000,9.500000,-24.500000> 0.500000} cylinder{<12.000000,-9.500000,24.500000> <12.000000,9.500000,24.500000> 0.500000} cylinder{<12.000000,-9.500000,24.500000> <-12.000000,-9.500000,24.500000> 0.500000} cylinder{<12.000000,-9.500000,-24.500000> <-12.000000,-9.500000,-24.500000> 0.500000} cylinder{<12.000000,9.500000,24.500000> <-12.000000,9.500000,24.500000> 0.500000} cylinder{<12.000000,9.500000,-24.500000> <-12.000000,9.500000,-24.500000> 0.500000} cylinder{<-12.000000,9.500000,24.500000> <-12.000000,9.500000,-24.500000> 0.500000} cylinder{<12.000000,9.500000,24.500000> <12.000000,9.500000,-24.500000> 0.500000} cylinder{<-12.000000,-9.500000,24.500000> <-12.000000,-9.500000,-24.500000> 0.500000} cylinder{<12.000000,-9.500000,24.500000> <12.000000,-9.500000,-24.500000> 0.500000} sphere{<12.000000,9.500000,24.500000> 0.500000} sphere{<-12.000000,9.500000,24.500000> 0.500000} sphere{<12.000000,-9.500000,24.500000> 0.500000} sphere{<-12.000000,-9.500000,24.500000> 0.500000} sphere{<12.000000,9.500000,-24.500000> 0.500000} sphere{<-12.000000,9.500000,-24.500000> 0.500000} sphere{<12.000000,-9.500000,-24.500000> 0.500000} sphere{<-12.000000,-9.500000,-24.500000> 0.500000} bounded_by{box{<12.500000,10.000000,25.000000> <-12.500000,-10.000000,-25.000000>}} translate<-12.5,10,25> scale <80/25,1,1> }//End object CassRoundBox -------- Cut Here ----------- Follows is file Caption.POV ----------- #declare caption = // uses image color index as height, extends along X-Z axes // from <0 0 0> to <1 1 1> height_field { gif "caption text.gif" // the file to read (gif/tga/pot) smooth // make smoother surface water_level .1 // truncate/clip below N (0.0 ... 1.0) scale<10,.2,1.2> scale <3,1,3> rotate<-90,0,0> texture{Stone13} translate<-30,0,0> bounded_by{box{<0,0,0><1,1,1> scale<10,.2,1.2> scale <3,1,3> rotate<-90,0,0> translate<-30,0,0> }} }