#include "colors.inc" #include "shapes.inc" #include "textures.inc" #default { pigment { color White } } // Some Basic Shapes for Fish #declare HemiSphere_X = intersection { object { Sphere } object { Cube translate 1*x } } #declare HemiSphere_Y = object { HemiSphere_X rotate 90*z } #declare HemiSphere_Z = object { HemiSphere_X rotate -90*y } #declare QuaterSphere_YZ = intersection { object { Sphere } object { Cube translate <0, 1, 1> } } #declare QuaterSphere_ZX = object { QuaterSphere_YZ rotate -90*z } #declare QuaterSphere_XY = object { QuaterSphere_YZ rotate 90*y } // Some Fins #declare RoundFinL = object { Disk_X translate 1*z scale 0.1*x } #declare TriangleFinL = object { prism { linear_sweep linear_spline -0.1, +0.1, 3, <0, 0>, <1, -1>, <1, +1> } rotate 90*x rotate -90*y } #declare RoundFinM = object { RoundFinL scale <1, 0.5, 1.0> } #declare RoundFinS = object { RoundFinL scale <1, 0.25, 0.5> } #declare TriangleFinM = object { TriangleFinL scale <1, 0.5, 1.0> } #declare TriangleFinS = object { TriangleFinL scale <1, 0.25, 0.5> } // Eye Ball #declare EyeBall = merge { object { Sphere scale 1.0 pigment { color White } } object { Sphere scale <0.5, 0.5, 0.15> translate -0.85*z pigment { color Black } } scale 0.5 } // Parts of Short Fish #declare ShortFishHead = merge { object { QuaterSphere_YZ scale <1, +3, -3> } // upper object { QuaterSphere_YZ scale <1, -2, -3> } // lower object { EyeBall rotate -30*y translate <+0.7, 1, -1.5> } // left object { EyeBall rotate +30*y translate <-0.7, 1, -1.5> } // right } #declare ShortFishTail = merge { object { QuaterSphere_YZ scale <1, +3, 5> } // upper object { QuaterSphere_YZ scale <1, -2, 5> } // lower object { RoundFinS rotate +15*y translate <+1, 0, 0> } // left object { RoundFinS rotate -15*y translate <-1, 0, 0> } // right } #declare ShortFishTailFin = object { RoundFinL translate 4*z } // Parts for Medium Fish #declare MediumFishHead = merge { object { QuaterSphere_YZ scale <1, +3, -5> } // upper object { QuaterSphere_YZ scale <1, -2, -5> } // lower object { EyeBall rotate -45*y translate <+0.7, 1, -2.5> } // left object { EyeBall rotate +45*y translate <-0.7, 1, -2.5> } // right } #declare MediumFishTail = merge { object { QuaterSphere_YZ scale <1, +3, 10> } // upper object { QuaterSphere_YZ scale <1, -2, 10> } // lower object { TriangleFinM rotate +15*y translate <+0.8, -0.5, 0> } // left object { TriangleFinM rotate -15*y translate <-0.8, -0.5, 0> } // right } #declare MediumFishTailFin = object { TriangleFinL scale 1.5 translate 9.5*z } // Parts for Fat Fish #declare FatFishHead = merge { object { QuaterSphere_YZ scale <1.5, +1, -2.5> } // upper object { QuaterSphere_YZ scale <1.5, -3, -2.5> } // lower object { EyeBall rotate -0*y translate <+0.5, 0.85, -2.0> } // left object { EyeBall rotate +0*y translate <-0.5, 0.85, -2.0> } // right } #declare FatFishTail = merge { object { QuaterSphere_YZ scale <1.5, +1, 5> } // upper object { QuaterSphere_YZ scale <1.5, -3, 5> } // lower object { RoundFinS rotate +15*y translate <+1.5, 0, 0> } // left object { RoundFinS rotate -15*y translate <-1.5, 0, 0> } // right } #declare FatFishTailFin = object { RoundFinM translate 4*z } #declare MyFish1 = merge { object { ShortFishHead } object { ShortFishTail } object { ShortFishTailFin } pigment { color Turquoise } } #declare MyFish2 = merge { object { MediumFishHead } object { MediumFishTail } object { MediumFishTailFin } pigment { color Quartz } } #declare MyFish3 = merge { object { FatFishHead } object { FatFishTail } object { FatFishTailFin } pigment { color Goldenrod } } /* object { MyFish1 translate < 0, 0, 0> } object { MyFish2 translate <-10, 0, 0> } object { MyFish3 translate < 7, 0, 0> } object { Cylinder_X scale 0.1 pigment { color Red } } // x axis object { Cylinder_Y scale 0.1 pigment { color Green } } // y axis object { Cylinder_Z scale 0.1 pigment { color Blue } } // z axis */ #declare S = seed(123); #declare I = 0; #while (I < 1000) object { MyFish2 translate <70*pow(rand(S), 2)+30, 200*rand(S)-100, 0> rotate (rand(S)*20 - 5)*x rotate rand(S)*360*y } #declare I = I + 1; #end #declare I = 0; #while (I < 50) object { MyFish1 translate <30*rand(S) + 300, 20*rand(S), 0> rotate (rand(S)*10 - 5)*x rotate (rand(S)*120 - 60)*y translate <-100, -130, 0> } #declare I = I + 1; #end #declare I = 0; #while (I < 100) object { MyFish3 translate <30*rand(S) + 250, 20*rand(S), 0> rotate (rand(S)*10 - 5)*x rotate (rand(S)*120 - 45)*y translate <-50, -160, 0> } #declare I = I + 1; #end // Sea Surface object { Plane_XZ material { M_Green_Glass } normal { bumps scale <3, 3, 3> } translate 150*y } background { color Turquoise } #declare CAMLOC = <200, -200, -300>; camera { location CAMLOC look_at <20.0, 0.0, 0.0> angle 25 } light_source { CAMLOC color White*1.5 parallel point_at <0, 0, 0> } light_source { <-5, 10, -5> color NeonBlue*1 parallel point_at <0, 0, 0> }