After some thought about how to project this image into a three dimensional space, I came up with the image in Figure 23-5 .
I've included several area lights to make the logo appear brighter on all the visible sides so that it will show up better in this book. The code for this logo is really simple:
// Persistence-of-Vision Ray-Tracer Scene Description File
// File: 3d_logo_1.pov
// Auth: Steve Murphy
// ==== Standard POV-Ray Includes ====
#include "colors.inc" // Standard Color definitions
background { color White }
// camera { location <0, 20, 0> look_at <0, 0, 0> } // top
camera { location <0, 0, -30> look_at <0, 0, 0> } // front
// camera { location <-20, 0, 0> look_at <0, 0, 0> } // left
// camera { location <10, 10, -30> look_at <0, 0, 0> } // perspective
light_source { <0, 0, -130> color White }
light_source { <130, 0, 0> color White }
light_source { <-130, 0, 0> color White }
light_source { <0, 130, 0> color White }
light_source { <0, -130, 0> color White }
// larger box in the center
box {
<-3, -3, -3>, <3, 3, 3>
pigment { color Blue }
}
// make a box object
#declare myBox = box {
<-2, -2, -2>, <2, 2, 2>
pigment { color Blue }
}
object { myBox translate <-4, 4, -4> } // tlf
object { myBox translate <-4, -4, -4> } // blf
object { myBox translate <-4, 4, 4> } // tlb
object { myBox translate <-4, -4, 4> } // blb
object { myBox translate <4, 4, -4> } // trf
object { myBox translate <4, -4, -4> } // brf
object { myBox translate <4, 4, 4> } // trb
object { myBox translate <4, -4, 4> } // brb
// make a cone object
#declare myCone = cone {
<0, -3, 0>, 4
<0, 3, 0>, 0
pigment { color Green }
}
object { myCone translate <0, 9, 0> } // top
object { myCone rotate <180, 0, 0> translate <0, -9, 0> } // bottom
object { myCone rotate <0, 0, 90> translate <-9, 0, 0> } // left
object { myCone rotate <0, 0, -90> translate <9, 0, 0> } // right
// make a sphere object
#declare mySphere = sphere {
<0, 0, 0>, 2
pigment {color Red}
}
object { mySphere translate <0, 12, 0> }
object { mySphere translate <12, 0, 0> }
object { mySphere translate <0, -12, 0> }
object { mySphere translate <-12, 0, 0> }
The first thing we do is set up the general stuff like the lighting and camera position. Then we define our basic shapes , or building blocks. Next we use our blocks to form each side of the logo. Each object is rotated and translated into its proper relative location from the coordinate <0, 0, 0>.
Once you're done with this example, try changing some textures or pigments, or add some new primitive objects to the scene and see what else you can come up with. Try to get fancy with it.