// Case -- Rollkiste mit Metallbeschlaegen // (C) 1998 Christian Perle #include "colors.inc" #include "textures.inc" #declare TotalCam = camera { location -20*z direction 2.2*z look_at 0*z rotate <25, 35, 0> } #declare CloseUpCam = camera { location <0, 10, -10> direction 10*z look_at <1.6, 1.4, -2> } camera { TotalCam } //camera { CloseUpCam } light_source { <100, 100, -200> color White } light_source { <-50, 100, -100> color Gray70 } background { color Gray50 } #declare Eps = 1e-4 #declare Linewidth = 0.04 #declare TGrid = texture { pigment { gradient z color_map { [0 color green .5] [Linewidth color White] [1-Linewidth color White] [1 color green .5] } } } texture { pigment { gradient x color_map { [0 color green .5] [Linewidth color Clear] [1-Linewidth color Clear] [1 color green .5] } } } #declare WandTex = pigment { crackle scale 1/10 color_map { [0 color Gray30] [1 color Gray10] } } #declare Rad = union { cylinder { -.5*z, .5*z, 1.2 pigment { gradient z scale 1/8 color_map { [0 color Gray10] [0.5 color Gray30] [1 color Gray10] } } } union { cylinder { -.55*z, .55*z, .7 } torus { .7, .125 rotate 90*x translate -.425*z } torus { .7, .125 rotate 90*x translate .425*z } texture { Chrome_Metal } } } #declare RGeh = intersection { union { intersection { difference { cylinder { -.7*x, .7*x, .5 } cylinder { -(.7+Eps)*x, (.7+Eps)*x, .4 } } box { <-(.7+Eps), 0, -.5>, <.7+Eps, .5, 0> } } intersection { difference { cylinder { -.7*x, .7*x, .5 } cylinder { -(.7+Eps)*x, (.7+Eps)*x, .4 } } box { <-(.7+Eps), 0, -.5>, <.7+Eps, .5, 0> } scale <1, 1, -1> translate 1*z } box { <-.7, .4, 0>, <.7, .5, 1> } box { <-.7, -1.2, -.5>, <.7, 0, -.4> } box { <-.7, -1.2, 1.4>, <.7, 0, 1.5> } } box { <-.7, -1.2, -(.5+Eps)>, <1, 1, 1.5+Eps> rotate 30*z } texture { Chrome_Metal } translate -.5*z } // Rad mit Gehaeuse #declare Rad_RGeh = union { object { RGeh } cylinder { -1.05*z, 1.05*z, .1 texture { Chrome_Metal } translate <.1, -1, 0> } object { Rad scale <.9, .9, 1.2> translate <.1, -1, 0> } } #declare Ecke = intersection { difference { difference { box { -1, 1 } box { -(1+Eps), .8 } rotate 45*z rotate -degrees(asin(sqrt(1/3)))*x } cylinder { <0, -2, .5>, <0, 1, -1.85>, .7 } cylinder { <0, -2, .5>, <0, 1, -1.85>, .7 rotate 120*y } cylinder { <0, -2, .5>, <0, 1, -1.85>, .7 rotate 240*y } cylinder { <0, -2, .5>, <0, 1, 1.2>, .1 } cylinder { <0, -2, .5>, <0, 1, 1.2>, .1 rotate 120*y } cylinder { <0, -2, .5>, <0, 1, 1.2>, .1 rotate 240*y } } box { <-3, 0, -3>, <3, 3, 3> } rotate degrees(asin(sqrt(1/3)))*x rotate -45*z } // Eckstueck fuer vordere, linke, untere Ecke #declare EckStueck = union { object { Ecke } difference { sphere { .6, .685 } box { -1, .8 } } scale -1 translate .55 } // Wanddicke #declare Dicke = .2 #declare SeitenWand = box { <-3, 0, -Dicke>, <3, 3, Dicke> } // Strebendicke #declare SDicke = .1 #declare SeitenStrebe = union { cylinder { -(3-Dicke)*x, (3-Dicke)*x, SDicke scale <1, 1, SDicke> translate -SDicke*y } cylinder { -(3-Dicke)*x, (3-Dicke)*x, SDicke scale <1, SDicke, 1> translate SDicke*z } } #declare Seiten4Strebe = union { object { SeitenStrebe scale <1.02, 1, 1> translate <0, 0, -(2+Dicke)> } object { SeitenStrebe scale <1.02, 1, 1> rotate 180*y translate <0, 0, 2+Dicke> } object { SeitenStrebe scale <.78, 1, 1> rotate 90*y translate <-3, 0, 0> } object { SeitenStrebe scale <.78, 1, 1> rotate -90*y translate <3, 0, 0> } } #declare HoehenStrebe = union { cylinder { 0*y, 3*y, SDicke scale <1, 1, SDicke> translate -SDicke*z } cylinder { 0*y, 3*y, SDicke scale <SDicke, 1, 1> translate -SDicke*x } } // Mini-Eckstueck fuer vordere, linke, obere Ecke #declare MiniEck = difference { box { -1, 1 } box { -(1+Eps), .85 } cylinder { <-(1+Eps), -.5, -.5>, <(1+Eps), -.5, -.5>, .15 } cylinder { <-(1+Eps), .2, .1>, <(1+Eps), .2, .1>, .15 } cylinder { <-.5, -(1+Eps), -.5>, <-.5, (1+Eps), -.5>, .15 } cylinder { <.2, -(1+Eps), .1>, <.2, (1+Eps), .1>, .15 } cylinder { <-.5, -.5, -(1+Eps)>, <-.5, -.5, (1+Eps)>, .15 } cylinder { <.2, .1, -(1+Eps)>, <.2, .1, (1+Eps)>, .15 } scale <-1, 1, -1> } // Aussparung fuer die Schloesser #declare SchlossTeil = union { box { <-1, -1, -.4>, <1, 1, .4> } cylinder { <-1, -1, 0>, <-1, 1, 0>, .4 } cylinder { <1, -1, 0>, <1, 1, 0>, .4 } cylinder { <-1, -1, 0>, <1, -1, 0>, .4 } cylinder { <-1, 1, 0>, <1, 1, 0>, .4 } sphere { <-1, -1, 0>, .4 } sphere { <1, -1, 0>, .4 } sphere { <1, 1, 0>, .4 } sphere { <-1, 1, 0>, .4 } scale <1, 1.2, 1> } // Schlossoberteil #declare SchlossOben = intersection { sphere { 0, 1 } box { <-(1+Eps), 0, -(1+Eps)>, 1+Eps } scale <1/3, 1/4, 1/9> } #declare SchlossUnter = difference { cylinder { <0, 0, 0>, <0, -.5, 0>, 1 } cylinder { <0, -.25, -(1+Eps)>, <0, -.25, 1+Eps>, .07 } scale <1/3, 1, 1/9> } // Scharnier #declare Scharnier = union { cylinder { -1.5*x, -1.1*x, .4 } cylinder { -.9*x, .9*x, .4 } cylinder { 1.1*x, 1.5*x, .4 } } #declare UnterTeil = union { difference { union { union { object { SeitenWand translate -2*z } object { SeitenWand translate 2*z } object { SeitenWand scale <2/3, 1, 1> rotate 90*y translate -(3-Dicke)*x } object { SeitenWand scale <2/3, 1, 1> rotate 90*y translate (3-Dicke)*x } box { <-(3-Dicke), 0, -2>, <3-Dicke, Dicke, 2> } pigment { WandTex } } union { object { Seiten4Strebe translate 3.04*y } object { Seiten4Strebe rotate 180*x } object { HoehenStrebe translate <-2.95, 0, -2.1> } object { HoehenStrebe rotate 90*y translate <-2.95, 0, 2.1> } object { HoehenStrebe rotate 180*y translate <2.95, 0, 2.1> } object { HoehenStrebe rotate 270*y translate <2.95, 0, -2.1> } texture { Chrome_Metal } } union { object { EckStueck scale 1/2 translate <-(3-Dicke), 0, -2> } object { EckStueck scale 1/2 rotate -90*y translate <3-Dicke, 0, -2> } object { EckStueck scale 1/2 rotate 90*y translate <-(3-Dicke), 0, 2> } object { EckStueck scale 1/2 rotate 180*y translate <3-Dicke, 0, 2> } object { MiniEck scale .2 translate <-2.87, 2.88, -2.04> } object { MiniEck scale .2 rotate 90*y translate <-2.87, 2.88, 2.04> } object { MiniEck scale .2 rotate 180*y translate <2.87, 2.88, 2.04> } object { MiniEck scale .2 rotate 270*y translate <2.87, 2.88, -2.04> } texture { Chrome_Metal } } } union { object { SchlossTeil scale 1/3 translate <-1.6, 2.8, -2.2> } object { SchlossTeil scale 1/3 translate <1.6, 2.8, -2.2> } texture { Chrome_Metal } } } union { object { SchlossUnter translate <-1.6, 3, -2.1> } object { SchlossUnter translate <1.6, 3, -2.1> } object { Scharnier scale .3 translate <-1.6, 3, 2.2> } object { Scharnier scale .3 translate <1.6, 3, 2.2> } texture { Chrome_Metal } } } #declare OberTeil = union { difference { union { union { union { object { SeitenWand translate -2*z } object { SeitenWand translate 2*z } object { SeitenWand scale <2/3, 1, 1> rotate 90*y translate -(3-Dicke)*x } object { SeitenWand scale <2/3, 1, 1> rotate 90*y translate (3-Dicke)*x } scale <1, .3, 1> } box { <-(3-Dicke), .9-Dicke, -2>, <3-Dicke, .9, 2> } pigment { WandTex } } union { object { Seiten4Strebe translate .94*y } object { Seiten4Strebe rotate 180*x } object { HoehenStrebe scale <1, .3, 1> translate <-2.95, 0, -2.1> } object { HoehenStrebe scale <1, .3, 1> rotate 90*y translate <-2.95, 0, 2.1> } object { HoehenStrebe scale <1, .3, 1> rotate 180*y translate <2.95, 0, 2.1> } object { HoehenStrebe scale <1, .3, 1> rotate 270*y translate <2.95, 0, -2.1> } texture { Chrome_Metal } } union { object { EckStueck scale 1/2 scale <1, -1, 1> translate <-(3-Dicke), .75, -2> } object { EckStueck scale 1/2 scale <1, -1, 1> rotate -90*y translate <3-Dicke, .75, -2> } object { EckStueck scale 1/2 scale <1, -1, 1> rotate 90*y translate <-(3-Dicke), .75, 2> } object { EckStueck scale 1/2 scale <1, -1, 1> rotate 180*y translate <3-Dicke, .75, 2> } texture { Chrome_Metal } } } union { object { SchlossTeil scale 1/3 translate <-1.6, -.2, -2.2> } object { SchlossTeil scale 1/3 translate <1.6, -.2, -2.2> } texture { Chrome_Metal } } } union { object { SchlossOben translate <-1.6, 0, -2.1> } object { SchlossOben translate <1.6, 0, -2.1> } texture { Chrome_Metal } } translate -2*z } // Das komplette Case #declare RotRad1 = <0, 0, 0> #declare RotRad2 = <0, 180+20, 0> #declare RotRad3 = <0, 0, 0> #declare RotRad4 = <0, 180+20, 0> #declare RotOberTeil = <12, 0, 0> #declare Case = union { object { UnterTeil } object { Rad_RGeh scale .4 rotate RotRad1 translate <2.1, -.22, 1.6> } object { Rad_RGeh scale .4 rotate RotRad2 translate <-2.1, -.22, 1.6> } object { Rad_RGeh scale .4 rotate RotRad3 translate <2.1, -.22, -1.6> } object { Rad_RGeh scale .4 rotate RotRad4 translate <-2.1, -.22, -1.6> } object { OberTeil rotate RotOberTeil translate <0, 3, 2> } } object { Case translate -1.6*y } plane { y, -2.75 texture { TGrid } }