module Scenes where import Basics import Objects import Vectors import Camera import World import Anims import Bitmaps import Env import System.IO.Unsafe import Textures import Colors import Control.Applicative ------------------- -- Colors white = grayTint 1.0 blue = hue (-2*pi/3) violet = hue (-pi/2) magenta = hue (-pi/3) red = hue 0 orange = hue (pi/6) yellow = hue (pi/3) green = hue (2*pi/3) cyan = hue pi black = rgb 0 0 0 ---------------------- -- Textures mirror = const Material {diffuse = blackColor, materialReflection = whiteColor, materialRefraction = blackColor, materialRefrCoef = 0 } glass = const Material {diffuse = blackColor, -- FIXME materialReflection = grayTint 0.0, materialRefraction = grayTint 1, materialRefrCoef = 1.33 } ivoryChess = project stdVertical $ checkboard (vec 15 15 15) (matte white) (matte black) joelChess = project stdVertical $ checkboard (vec 15 15 15) (matte blue) (matte yellow) --------------------- -- Vectors stdVertical = vec 0 1 0 origin = constVec 0 camloc = (vec 0 10 (-40)) camLook = origin lightloc = negate (vec 12 12 12) cam1 = cameraLooks stdVertical camloc camLook ellipsoid = Quadric origin (vec 0.5 0.5 0.5) (sq 7) -- hyperboloid = Quadric origin (vec 0 1.2 0) (sq 7) -- hyperboloid' = Quadric origin (vec 0 1.2 0) (negate $ sq 7) -- cylinder = Quadric origin (vec 0 1 0) (sq 7) aQuad :: Anim Shape aQuad = pure $ Quadric (vec 0 0 0) (vec 1.2 0 0) (sq 7) aPoint1 = MetaPoint <$> (liss (pure (vec 10 10 10)) (pure (vec 1 2 3)) (pure (vec 0 0 0))) <*> pure 2 aPoint2 = MetaPoint <$> (liss (pure (vec 10 10 10)) (pure (vec 1 2 3)) (pure (vec 1 1 1))) <*> pure 2 aPoint3 = MetaPoint <$> (liss (pure (vec 10 10 10)) (pure (vec 1 2 3)) (pure (vec 2 2 2))) <*> pure 2 aM = aMeta [aPoint1, aPoint2, aPoint3] (pure 0.1) animScene :: Anim World animScene = world <$> sequ [ -- object <$> (Sphere <$> (orbit (const stdVertical) (pure vec 5 10 0) ) <*> pure 7) <*> pure mirror, -- object <$> aM <*> pure (matte blue), object <$> (Quadric origin <$> (orbit (pure $ vec 0 1 0) (pure $ vec 0.5 0.5 0.5)) <*> pure (sq 7)) <*> pure glass, -- object <$> (Quadric origin <$> (vec <$> pure 0 <*> (subtract 2 <$> ask) <*> pure 0) <*> pure (sq 7)) <*> pure (matte green), object <$> (Plane <$> pure (vec 0 1 0) <*> pure (-15)) <*> pure ivoryChess ] <*> pure [DirLight (normalized (vec 0 (-3) 0)) (grayTint 0.8), AmbientLight (grayTint 0.15) ] <*> pure env where orb = orbit (const stdVertical) (pure vec 15 10 0) env = rainbowEnv --env = skyBitmapEnv skyBitmap skyBitmap = unsafePerformIO $ loadBitmap "ciel.tif"