// // CHS.POV - Acryllic Chess Set // // By Neil Clark - December 1994 // SysOp - The Tackle Box BBS // (405) 359-3301 // // For the December 'Games' Internet ray tracing contest. // // Inspired from the book '101 DO-IT-YOURSELF PROJECTS, pp. 240-241. // // This image took 21 hours - 57 minutes on a 486-50 with +a0.3 at 640x480. // // All objects are CSG and the base scale is in inches. // The chess board is made up of 1-1/2" squares being 12" by 12" // #include "colors.inc" #include "shapes.inc" #include "textures.inc" #declare Blue_Set = texture { Glass3 pigment { color red 0.93 green 0.91 blue 0.98 filter 0.90} } #declare Red_Set = texture { Glass3 } #declare Dark_Sq_Texture = texture { Glass3 finish { Glossy } pigment { color red 0.13 green 0.15 blue 0.16 } } #declare Light_Sq_Texture = texture { Glass3 finish { Glossy } pigment { color red 0.93 green 0.93 blue 0.93 } } camera{ location < -4.5, 4.5, -4.5 > // final left end-corner shot look_at < 3, -1, 3 > //location < 6, 4.5, -8 > // straight-on //look_at < 6, -1, 6 > //location < 1, 1, -1 > // closeup left end-corner shot //look_at < 1, -1, 0 > //location < -7.5, 3, -7.5 > // farther away //look_at < 3, -7, 3 > } light_source { <6, 35, 6> color White area_light <7, 0, 0>, <0, 8, 0>, 3, 3 adaptive 0 jitter spotlight point_at <6, 0, 6> tightness 0 radius 0 falloff 35 } light_source { < -500, 500, -500 > color White } // Dark Square #declare Dark_Square = object { box { <0, -1.125, 0>, <1.5, -1, 1.5> } texture { pigment { color Black } finish { Glossy }} } #declare Light_Square = object { box { <0, -1.125, 0>, <1.5, -1, 1.5> } texture { pigment { color White } finish { Glossy }} } // Chess Board - Squares #declare Squares = union { // Row 1 object { Light_Square translate <0, 0, 0> } object { Light_Square translate <3, 0, 0> } object { Light_Square translate <6, 0, 0> } object { Light_Square translate <9, 0, 0> } object { Dark_Square translate <1.5, 0, 0> } object { Dark_Square translate <4.5, 0, 0> } object { Dark_Square translate <7.5, 0, 0> } object { Dark_Square translate <10.5, 0, 0> } // Row 2 object { Light_Square translate <1.5, 0, 1.5> } object { Light_Square translate <4.5, 0, 1.5> } object { Light_Square translate <7.5, 0, 1.5> } object { Light_Square translate <10.5, 0, 1.5> } object { Dark_Square translate <0, 0, 1.5> } object { Dark_Square translate <3, 0, 1.5> } object { Dark_Square translate <6, 0, 1.5> } object { Dark_Square translate <9, 0, 1.5> } // Row 3 object { Light_Square translate <0, 0, 3> } object { Light_Square translate <3, 0, 3> } object { Light_Square translate <6, 0, 3> } object { Light_Square translate <9, 0, 3> } object { Dark_Square translate <1.5, 0, 3> } object { Dark_Square translate <4.5, 0, 3> } object { Dark_Square translate <7.5, 0, 3> } object { Dark_Square translate <10.5, 0, 3> } // Row 4 object { Light_Square translate <1.5, 0, 4.5> } object { Light_Square translate <4.5, 0, 4.5> } object { Light_Square translate <7.5, 0, 4.5> } object { Light_Square translate <10.5, 0, 4.5> } object { Dark_Square translate <0, 0, 4.5> } object { Dark_Square translate <3, 0, 4.5> } object { Dark_Square translate <6, 0, 4.5> } object { Dark_Square translate <9, 0, 4.5> } // Row 5 object { Light_Square translate <0, 0, 6> } object { Light_Square translate <3, 0, 6> } object { Light_Square translate <6, 0, 6> } object { Light_Square translate <9, 0, 6> } object { Dark_Square translate <1.5, 0, 6> } object { Dark_Square translate <4.5, 0, 6> } object { Dark_Square translate <7.5, 0, 6> } object { Dark_Square translate <10.5, 0, 6> } // Row 6 object { Light_Square translate <1.5, 0, 7.5> } object { Light_Square translate <4.5, 0, 7.5> } object { Light_Square translate <7.5, 0, 7.5> } object { Light_Square translate <10.5, 0, 7.5> } object { Dark_Square translate <0, 0, 7.5> } object { Dark_Square translate <3, 0, 7.5> } object { Dark_Square translate <6, 0, 7.5> } object { Dark_Square translate <9, 0, 7.5> } // Row 7 object { Light_Square translate <0, 0, 9> } object { Light_Square translate <3, 0, 9> } object { Light_Square translate <6, 0, 9> } object { Light_Square translate <9, 0, 9> } object { Dark_Square translate <1.5, 0, 9> } object { Dark_Square translate <4.5, 0, 9> } object { Dark_Square translate <7.5, 0, 9> } object { Dark_Square translate <10.5, 0, 9> } // Row 8 object { Light_Square translate <1.5, 0, 10.5> } object { Light_Square translate <4.5, 0, 10.5> } object { Light_Square translate <7.5, 0, 10.5> } object { Light_Square translate <10.5, 0, 10.5> } object { Dark_Square translate <0, 0, 10.5> } object { Dark_Square translate <3, 0, 10.5> } object { Dark_Square translate <6, 0, 10.5> } object { Dark_Square translate <9, 0, 10.5> } } // Chess Board Base #declare Box_Side = intersection { union { object { box { < -1, -2, -0.6875 >, < 13, -1.5625, 0 > } translate <0, 0, 0> texture { Glossy DMFLightOak scale <2.4,2,1> } } object { Disk_X scale < 14, 0.3125, 0.3125 > translate <13, -2, -0.6875> texture { Glossy DMFLightOak scale <2.4,2,1>} } difference { object { box { < -1, -1.5625, -0.6875 >, < 13, -1.25, 0 > } } object { Disk_X scale < 14.1, 0.3125, 0.3125 > translate <13, -1.25, -0.6875> } texture { Glossy DMFLightOak scale <2.4,2,1>} } intersection { object { box { < -1, -1.25, -0.375 >, < 13, -1, 0 > translate <0, 0, 0> texture { Glossy DMFLightOak scale <2.4,2,1>} } } object { plane { y, 0 rotate <-60, 0, 0> translate <0, -1, -0.25 > } texture { Glossy DMFLightOak scale <2.4,2,1>} } } } plane { -x, 0 rotate <0, 45, 0> texture { Glossy DMFLightOak scale <2.4,2,1>} } plane { x, 0 rotate <0, -45, 0> translate <12,0,0> texture { Glossy DMFLightOak scale <2.4,2,1>} } } // Box Base #declare Box_Base = object { box { < 0, 0, 0 >, < 12, 0, 12 > translate <0, -2, 0> texture { Glossy DMFLightOak scale <1.4,1.2,1>} } } // Start of 1 set of pieces // King #declare King = difference { object { Disk_Y scale <1, 2.875, 1> texture { Blue_Set } } object { Disk_X scale <3, 0.5, 0.25> rotate <0, 0, -60> translate <0.9, 2.9, 0> texture { Blue_Set } } object { Disk_X scale <3, 0.5, 0.25> rotate <0, 0, 60> translate <-0.9, 2.9, 0> texture { Blue_Set } } object { Disk_Z scale <0.25, 0.5, 3> rotate <-60, 0, 0> translate <0, 2.9, -0.9> texture { Blue_Set } } object { Disk_Z scale <0.25, 0.5, 3> rotate <60, 0, 0> translate <0, 2.9, 0.9> texture { Blue_Set } } bounded_by { Disk_Y scale <1.1, 3, 1.1> } } // Queen #declare Queen = difference { object { Disk_Y scale <1, 2.5, 1> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,45,0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,90,0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,135,0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,180,0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,225,0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,270,0> texture { Blue_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,315,0> texture { Blue_Set } } bounded_by { Disk_Y scale <1.1, 3, 1.1> } } // Pawn #declare Pawn = object { Disk_Y scale <0.75, 1, 0.75> texture { Blue_Set } } // Bishop #declare Bishop = difference { intersection { object { Disk_Y scale <1, 1.875, 1> texture { Blue_Set } } object { plane { y, 0 } rotate <-35, 0, 0> translate <0, 1.2, 0> texture { Blue_Set } } } object { Disk_Z scale <0.25, 0.25, 3> rotate <-31, 0, 0> translate <0, 1.35, 0> texture { Blue_Set } } } // Rook #declare Rook = difference { object { Disk_Y scale <1, 2, 1> texture { Blue_Set } } object { box { <-1, -0.125, -0.125>, <1, 0.125, 0.125> } rotate <0, 0, 0> translate <0, 1.876, 0> texture { Blue_Set } } object { box { <-1, -0.125, -0.125>, <1, 0.125, 0.125> } rotate <0, 60, 0> translate <0, 1.876, 0> texture { Blue_Set } } object { box { <-1, -0.125, -0.125>, <1, 0.125, 0.125> } rotate <0, -60, 0> translate <0, 1.876, 0> texture { Blue_Set } } bounded_by { Disk_Y scale <1.1, 2.2, 1.1> } } // Knight #declare Knight = difference { intersection { object { Disk_Y scale <1, 2, 1> texture { Blue_Set } } object { sphere { <0, 0, 0>, 2 } translate <0, 0, 0> texture { Blue_Set } } } object { box { <0, 0, 0>, <3, 0.25, 0.25> } translate <-1, 1, -1> texture { Blue_Set } } object { box { <-0.125, -1, -0.125>, <0.125, 2, 0.125> } rotate <-10,0,0> translate <0, -0.8, -0.75> texture { Blue_Set } } bounded_by { Disk_Y scale <1.1, 2.2, 1.1> } } // Start of Red Pieces // King2 #declare King2 = difference { object { Disk_Y scale <1, 2.875, 1> texture { Red_Set } } object { Disk_X scale <3, 0.5, 0.25> rotate <0, 0, -60> translate <0.9, 2.9, 0> texture { Red_Set } } object { Disk_X scale <3, 0.5, 0.25> rotate <0, 0, 60> translate <-0.9, 2.9, 0> texture { Red_Set } } object { Disk_Z scale <0.25, 0.5, 3> rotate <-60, 0, 0> translate <0, 2.9, -0.9> texture { Red_Set } } object { Disk_Z scale <0.25, 0.5, 3> rotate <60, 0, 0> translate <0, 2.9, 0.9> texture { Red_Set } } bounded_by { Disk_Y scale <1.1, 3, 1.1> } } // Queen #declare Queen2 = difference { object { Disk_Y scale <1, 2.5, 1> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,45,0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,90,0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,135,0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,180,0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,225,0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,270,0> texture { Red_Set } } object { box { <-1,-1,-1>, <1,1,1> } scale <3, 0.3, 0.3> rotate <45, 0, 0> rotate <0, 0, -45> translate <0.85, 2.7, 0> rotate <0,315,0> texture { Red_Set } } bounded_by { Disk_Y scale <1.1, 3, 1.1> } } // Pawn #declare Pawn2 = object { Disk_Y scale <0.75, 1, 0.75> texture { Red_Set } } // Bishop #declare Bishop2 = difference { intersection { object { Disk_Y scale <1, 1.875, 1> texture { Red_Set } } object { plane { y, 0 } rotate <-35, 0, 0> translate <0, 1.2, 0> texture { Red_Set } } } object { Disk_Z scale <0.25, 0.25, 3> rotate <-31, 0, 0> translate <0, 1.35, 0> texture { Red_Set } } } // Rook #declare Rook2 = difference { object { Disk_Y scale <1, 2, 1> texture { Red_Set } } object { box { <-1, -0.125, -0.125>, <1, 0.125, 0.125> } rotate <0, 0, 0> translate <0, 1.876, 0> texture { Red_Set } } object { box { <-1, -0.125, -0.125>, <1, 0.125, 0.125> } rotate <0, 60, 0> translate <0, 1.876, 0> texture { Red_Set } } object { box { <-1, -0.125, -0.125>, <1, 0.125, 0.125> } rotate <0, -60, 0> translate <0, 1.876, 0> texture { Red_Set } } bounded_by { Disk_Y scale <1.1, 2.2, 1.1> } } // Knight #declare Knight2 = difference { intersection { object { Disk_Y scale <1, 2, 1> texture { Red_Set } } object { sphere { <0, 0, 0>, 2 } translate <0, 0, 0> texture { Red_Set } } } object { box { <0, 0, 0>, <3, 0.25, 0.25> } translate <-1, 1, -1> texture { Red_Set } } object { box { <-0.125, -1, -0.125>, <0.125, 2, 0.125> } rotate <-10,0,0> translate <0, -0.8, -0.75> texture { Red_Set } } bounded_by { Disk_Y scale <1.1, 2.2, 1.1> } } // Master Objects object { Squares } object { Box_Base } object { Box_Side } object { Box_Side rotate <0, 90, 0> translate <0, 0, 12> } object { Box_Side rotate <0, -90, 0> translate <12, 0, 0> } object { Box_Side rotate <0, -180, 0> translate <12, 0, 12> } // Blue Set object { Pawn scale <0.6, 0.75, 0.6> translate <0.75, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <2.25, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <3.75, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <5.25, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <6.75, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <8.25, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <9.75, -1, 2.25> } object { Pawn scale <0.6, 0.75, 0.6> translate <11.25, -1, 2.25> } object { Rook scale <0.6, 0.75, 0.6> translate <0.75, -1, 0.75> } object { Knight scale <0.6, 0.75, 0.6> rotate <0,180,0> translate <2.25, -1, 0.75> } object { Bishop scale <0.6, 0.75, 0.6> rotate <0,180,0> translate <3.75, -1, 0.75> } object { Queen scale <0.6, 0.75, 0.6> translate <5.25, -1, 0.75> } object { King scale <0.6, 0.75, 0.6> translate <6.75, -1, 0.75> } object { Bishop scale <0.6, 0.75, 0.6> rotate <0,180,0> translate <8.25, -1, 0.75> } object { Knight scale <0.6, 0.75, 0.6> rotate <0,180,0> translate <9.75, -1, 0.75> } object { Rook scale <0.6, 0.75, 0.6> translate <11.25, -1, 0.75> } // Red Set object { Pawn2 scale <0.6, 0.75, 0.6> translate <0.75, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <2.25, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <3.75, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <5.25, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <6.75, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <8.25, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <9.75, -1, 9.75> } object { Pawn2 scale <0.6, 0.75, 0.6> translate <11.25, -1, 9.75> } object { Rook2 scale <0.6, 0.75, 0.6> translate <0.75, -1, 11.25> } object { Knight2 scale <0.6, 0.75, 0.6> translate <2.25, -1, 11.25> } object { Bishop2 scale <0.6, 0.75, 0.6> rotate <0,0,0> translate <3.75, -1, 11.25> } object { Queen2 scale <0.6, 0.75, 0.6> translate <5.25, -1, 11.25> } object { King2 scale <0.6, 0.75, 0.6> translate <6.75, -1, 11.25> } object { Bishop2 scale <0.6, 0.75, 0.6> rotate <0,0,0> translate <8.25, -1, 11.25> } object { Knight2 scale <0.6, 0.75, 0.6> translate <9.75, -1, 11.25> } object { Rook2 scale <0.6, 0.75, 0.6> translate <11.25, -1, 11.25> }