packages feed

jort-1.0.0: Scenes.hs

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"