module Scene (Scene(Scene), Light(Light), Camera(Camera),
scene, camera, light,
sld, lits, cam, dtex, bground,
module Clr,
module Vec,
module Solid,
module Sphere,
module Triangle,
module Bih,
module Csg,
module Plane,
module Box,
module Bound,
module Cone,
module Tex) where
import Clr
import Vec
import Solid
import Sphere
import Triangle
import Bih
import Csg
import Plane
import Box
import Bound
import Cone
import Tex
-- This is the module to import if you want to have
-- access to all the Solid constructors and scene
-- defininition code.
--LIGHTS--
data Light = Light {litpos :: !Vec,
litcol :: !Color} deriving Show
light :: Vec -> Color -> Light
light pos clr = Light pos clr
-- CAMERA --
data Camera = Camera {campos, fwd, up, right :: !Vec}
deriving Show
default_cam = (Camera (vec 0.0 0.0 (-3.0))
(vec 0.0 0.0 1.0)
(vec 0.0 1.0 0.0)
(vec 1.0 0.0 0.0) )
camera :: Vec -> Vec -> Vec -> Flt -> Camera
camera pos at up angle =
let fwd = vnorm $ vsub at pos
right = vnorm $ vcross up fwd
up_ = vnorm $ vcross fwd right
cam_scale = tan ((pi/180)*(angle/2))
in
Camera pos fwd
(vscale up_ cam_scale)
(vscale right cam_scale)
--SCENE--
data Scene = Scene {sld :: SolidItem,
lits :: [Light],
cam :: Camera,
dtex :: Texture,
bground :: Color} deriving Show
scene :: SolidItem -> [Light] -> Camera -> Texture -> Color -> Scene
scene s l cam t clr = Scene s l cam t clr
{-
default_scene = (Scene (sphere (vec 0.0 0.0 0.0) 1.0)
[] default_cam t_white c_white)
-}