// // RayLogo.ray - CoolRay Scene Description File // // This sample Scene demonstrates how a set of triangles // can create a solid object. This is possible due to the // special CSG alogirithm used in CoolRay. This allows even // the usage of flat object like a Triangle to create solid // primitives. // A for loop is used to subtract 4 boxes from the pyramid // and so creating a 'sliced' pyramid. Additionally a sphere // is cut out of the pyramid. // scene RayLogo; meta author "Marcus Bürgel" date "2000-03-25" version 1.0.0 Scene { StrategySimple { } //StrategyAntialiasUniform { } PerspectiveCamera { location := <0, 4, -9>; look_at := <-1.7, 0.5, 0.5>; angle := 45; } World { var h :double; var pyramidTexture :Texture; var glassFinish :Finish; var c1 :Color; var c2 :Color; var c3 :Color; c1 := rgbt <1, 1, 1, 0.95>; c2 := rgbt <1, 1, 1, 0.95>; c3 := rgbt <1, 1, 1, 0.95>; glassFinish := Finish { ambient := 0.05; diffuse := 0.4; refraction := 1.0; ior := 1.5; specular := 0.7; specular_size := 0.002; reflection := 0.3; } pyramidTexture := SimpleTexture { XYZPigment { OnionPattern { //direction := <1, 0, 0>; noise := 0.3; turbulence := 1.6; octaves := 3; omega := 0.5; lambda := 3.0; } ColorMapList { ColorMapListEntry { value := 0.0; color := rgb <1, 0.78, 0.6>; } ColorMapListEntry { value := 0.5; color := rgb <0.75, 0.5, 0.3>; } ColorMapListEntry { value := 1.0; color := rgb <1, 0.78, 0.6>; } } } TransformationList { Scale { scale := <0.5, 0.5, 0.5>; } Translate { translate := <0, 1, 0>; } } } // SimpleTexture background_color := rgb <0.1, 0.05, 0.02>; PointLight { location := <-5, 6, -5>; color := rgb <1, 1, 1>; fade_power := 2; fade_distance := 7; } PointLight { location := <4, 5, -6>; color := rgb <0.6, 0.6, 0.6>; fade_power := 2; fade_distance := 7; } // height h := 1.225; Union { Difference { var i:integer; var k:double; // The Union forms the solid pyramid out of the flat triangles Union { Triangle { point1 := < 0, 0, 1>; point2 := <-0.866, 0, -0.5>; point3 := < 0.866, 0, -0.5>; } Triangle { point1 := <-0.866, 0, -0.5>; point2 := < 0, 0, 1>; point3 := <0, h, 0>; } Triangle { point1 := < 0, 0, 1>; point2 := < 0.866, 0, -0.5>; point3 := <0, h, 0>; } Triangle { point1 := < 0.866, 0, -0.5>; point2 := <-0.866, 0, -0.5>; point3 := <0, h, 0>; } } // Union k := 0; for i := 0 to 10 do { Box { point1 := <-1, i*0.1+0.08+k, -1>; point2 := <1, (i+1)*0.1, 1>; } k := k - 0.005; } Sphere { center := <0, 0.47, -0.3>; radius := 0.30; } } // Difference Difference { Sphere { radius := 0.27; } Sphere { radius := 0.26; } TransformationList { Translate { translate := <0, 0.47, -0.3>; } } SimpleTexture { SolidColorPigment { color := c3; } finish := glassFinish; } // SimpleTexture } Difference { Sphere { radius := 0.27; } Sphere { radius := 0.26; } TransformationList { Translate { translate := <0, 0.7, -1.3>; } } SimpleTexture { SolidColorPigment { color := c2; } finish := glassFinish; } // SimpleTexture } Difference { Sphere { radius := 0.27; } Sphere { radius := 0.26; } TransformationList { Translate { translate := <0, 0.8, -2.3>; } } SimpleTexture { SolidColorPigment { color := c1; } finish := glassFinish; } // SimpleTexture } texture := pyramidTexture; TransformationList { Scale { scale := <2, 2, 2>; } Rotate { rotate := <0, 40, 0>; } Translate { translate := <0.5, 0.5, 0>; } } } // Union Plane { normal := <0, 1, 0>; distance := -0.001; SimpleTexture { XYZPigment { CheckerPattern { size := 2; TransformationList { Rotate { rotate := <0, -20, 0>; } } } SimpleColorMap { color1 := rgb <1, 1, 1>; color2 := rgb <0.15, 0.15, 0.15>; } } Finish { ambient := 0.1; diffuse := 0.7; reflection := 0.3; } } // SimpleTexture } // Plane } // World } // Scene