// A POV-Ray interpretation of the Lua logo. // by Philippe Lhoste http://jove.prohosting.com/~philho/ // v. 1.1 -- 2002/08/06 -- flatRendering switch, added finish. // v. 1.0 -- 2002/08/01 -- Original release // Graphic design by A. Nakonechny. Copyright © 1998. All rights reserved. // +W200 +H200 // Bugs of the scene: the blue is too bright, and if non hollow, the fill-ins are not pure white. #version 3.5; #declare flatRendering = false; #if (flatRendering) // Try to look like the official logo as much as possible #declare logoThickness = 0.01; #declare nonHollowLogo = false; #else // Change these to alter the appearance of the logo #declare logoThickness = 0.5; #declare nonHollowLogo = true; #end global_settings { assumed_gamma 1 } camera { #if (flatRendering) location <0, 0, -3> #else // location <3, 0.75, 0> location <3.5, 2.5, -4> angle 30 #end look_at <0, 0, 0> right x*image_width/image_height } light_source { #if (flatRendering) <0, 0, -10> color rgb 1 shadowless #else <-10, 30, -10> color rgb 1 #end } background { color rgb <1, 1, 1> } // Change only for special effects... Official colors. #declare logoColor = rgb <0, 0, 123/255>; // Dark blue #declare orbitColor = rgb <0.5, 0.5, 0.5>; // Grey #macro Finish() #if (flatRendering) finish { ambient 0.2 diffuse 0.7 brilliance 1 } #else finish { ambient 0.5 diffuse 0.5 brilliance 0.7 } #end #end // These should not be changed: geometry of the logo #declare satelliteRadius = 0.015; #declare cutterNb = 36; #declare moonRadius = 1-sqrt(2)/2; #declare orbitRadius = 1 + moonRadius; #declare logoText = object { text { ttf "Arial.ttf" "Lua" logoThickness, 0 scale 0.9*(x + y) } }; #macro GetCenterOfText(txt) #local minTxt = min_extent(txt); #local maxTxt = max_extent(txt); (minTxt + (maxTxt - minTxt) / 2) #end union { difference { // Planet cylinder { 0, -logoThickness*y, 1 rotate -90*x } // Hole cylinder { logoThickness*y, -logoThickness*2*y, moonRadius rotate -90*x translate <1-2*moonRadius, 1-2*moonRadius, 0> } // Logo object { logoText scale z*3 translate <-GetCenterOfText(logoText).x, -0.5, -logoThickness> } } // Moon cylinder { 0, -logoThickness*y, moonRadius rotate -90*x translate <1, 1, 0> } pigment { color logoColor } Finish() } #declare baseCutterAngle = 360 / cutterNb; #declare cutterRadius = orbitRadius*2*pi / cutterNb / 4; // Orbit difference { torus { orbitRadius, satelliteRadius rotate -90*x } // Cut off around the moon cylinder { 0, satelliteRadius*3*y, moonRadius*1.2 rotate 90*x translate <1, 1, -satelliteRadius> } // Cut off to get dash effect #while (cutterNb > 0) sphere { 0, cutterRadius translate x*orbitRadius rotate z * cutterNb * baseCutterAngle #declare cutterNb = cutterNb - 1; } #end #if (flatRendering) // Orbit near the surface of the logo, otherwise with thick versions, // the apparent diameter of the orbit diminishes. translate z*satelliteRadius #else // Center the orbit on the thickness of the logo translate z*logoThickness/2 #end pigment { color orbitColor } } #if (nonHollowLogo) // Hole cylinder { 0, logoThickness*y, moonRadius rotate 90*x translate <1-2*moonRadius, 1-2*moonRadius, 0> pigment { rgb <1, 1, 1> } Finish() } // Logo object { logoText translate <-GetCenterOfText(logoText).x, -0.5, 0> pigment { rgb <1, 1, 1> } Finish() } #end