//----------------------------- ODSCmeshcam -------------------------------- // An implementation of an Omni-Directional Stereo Content (ODSC) mesh // camera in POV-Ray. // // https://developers.google.com/cardboard/jump/rendering-ods-content.pdf // // Render to square result (ie +W2048 +H2048) and by external image program // rotate the entire image 90 degrees counter clock wise. // // Notes: // // 1) Current POV-Ray mesh camera implementations work best in row order so // scenes built X+ up and the resultant image must be rotated counter // clockwise. Yes, a completely flat mesh could be implemented so no // rotation needed but it would be very large, slow to parse and much // messier to code. // // 2) The distribution 1, which allows easy implementation does not // support anti-aliasing. External blurring of a relatively high // resolution image will likely give a better looking result. //----------------------------- ODSCmeshcam -------------------------------- #version 3.7; global_settings { assumed_gamma 1 ambient_light srgb <1,1,1> } #declare Grey50 = srgbft <0.5,0.5,0.5,0,0>; background { color Grey50 } //--- Star mesh camera code ---- #declare IPD=0.065; // Distance between eye pupils #declare ImageHalfWidth=(image_width/2)-1; #declare Mesh00 = mesh { #for (i,0,ImageHalfWidth,1) triangle { vrotate(<0.001,0.001,0-(IPD/2)>,<0,0,180*(i/ImageHalfWidth)>), vrotate(<0.001,-0.000707,0.000707-(IPD/2)>,<0,0,180*(i/ImageHalfWidth)>), vrotate(<0.001,-0.000707,-0.000707-(IPD/2)>,<0,0,180*(i/ImageHalfWidth)>) } #end #for (i,0,ImageHalfWidth,1) triangle { vrotate(<0.001,0.001,0+(IPD/2)>,<0,0,180*(i/ImageHalfWidth)>), vrotate(<0.001,-0.000707,0.000707+(IPD/2)>,<0,0,180*(i/ImageHalfWidth)>), vrotate(<0.001,-0.000707,-0.000707+(IPD/2)>,<0,0,180*(i/ImageHalfWidth)>) } #end } #declare ImageHeight=image_height-1; #declare Camera02 = camera { mesh_camera { 1 1 #for (i,0,ImageHeight,1) mesh { Mesh00 rotate x*(360*(i/ImageHeight))} #end } } //--- End mesh camera code ---- #declare White = srgbft <1,1,1,0,0>; #declare Light00 = light_source { <50,150,-250>, White } #declare Green = srgbft <0,1,0,0,0>; #declare CylSide0 = cylinder { <-10,0,-10>, <10,0,10>, 1.01 pigment { color Green } translate <0,10,0> } #declare CylSide1 = cylinder { <-10,-10,0>, <10,10,0>, 1.01 pigment { color Green } translate <0,0,10> } #declare CylSide2 = cylinder { <10,0,-10>, <-10,0,10>, 1.01 pigment { color Green } translate <0,-10,0> } #declare CylSide3 = cylinder { <10,-10,0>, <-10,10,0>, 1.01 pigment { color Green } translate <0,0,-10> } #declare Red = srgbft <1,0,0,0,0>; #declare CylCrn0 = cylinder { <-10,0,0>, <10,0,0>, 1.01 pigment { color Red } translate <0,10,10> } #declare CylCrn1 = cylinder { <-10,0,0>, <10,0,0>, 1.01 pigment { color Red } translate <0,-10,10> } #declare CylCrn2 = cylinder { <-10,0,0>, <10,0,0>, 1.01 pigment { color Red } translate <0,-10,-10> } #declare CylCrn3 = cylinder { <-10,0,0>, <10,0,0>, 1.01 pigment { color Red } translate <0,10,-10> } #declare Union00 = union { object { CylCrn0 } object { CylCrn1 } object { CylCrn2 } object { CylCrn3 } object { CylSide0 } object { CylSide1 } object { CylSide2 } object { CylSide3 } } #declare TextXp = text { internal 1 "X+" 0.5, 0.0 translate <-0.5,-0.5,-0.25> rotate y*90 translate <1,0,0> } #declare TextXn = text { internal 1 "X-" 0.5, 0.0 translate <-0.5,-0.5,-0.25> rotate y*90 translate <-1,0,0> } #declare TextYp = text { internal 1 "Y+" 0.5, 0.0 translate <-0.5,-0.5,-0.25> rotate x*-90 translate <0,1,0> } #declare TextYn = text { internal 1 "Y-" 0.5, 0.0 translate <-0.5,-0.5,-0.25> rotate x*-90 translate <0,-1,0> } #declare TextZp = text { internal 1 "Z+" 0.5, 0.0 translate <-0.5,-0.5,-0.25> translate <0,0,1> } #declare TextZn = text { internal 1 "Z-" 0.5, 0.0 translate <-0.5,-0.5,-0.25> translate <0,0,-1> } #declare Orange = srgbft <1,0.5,0,0,0>; #declare Union01 = union { object { TextXp } object { TextXn } object { TextYp } object { TextYn } object { TextZp } object { TextZn } pigment { color Orange } } #declare Sphere0 = sphere { <3,5,3>, 0.5 } #declare Sphere1 = sphere { <-3,5,3>, 0.5 } #declare Sphere2 = sphere { <3,-5,3>, 0.5 } #declare Sphere3 = sphere { <-3,-5,3>, 0.5 } #declare Sphere4 = sphere { <3,5,-3>, 0.5 } #declare Sphere5 = sphere { <-3,5,-3>, 0.5 } #declare Sphere6 = sphere { <3,-5,-3>, 0.5 } #declare Sphere7 = sphere { <-3,-5,-3>, 0.5 } #declare Magenta = srgbft <1,0,1,0,0>; #declare Union02 = union { object { Sphere0 } object { Sphere1 } object { Sphere2 } object { Sphere3 } object { Sphere4 } object { Sphere5 } object { Sphere6 } object { Sphere7 } pigment { color Magenta } } //--- camera { Camera02 } light_source { Light00 } object { Union00 } object { Union01 } object { Union02 }