module Data.Glome.Scene (
Scene(Scene), Light(Light), Camera(Camera),
scene, camera, light,
sld, lits, cam, dtex, bground,
primcount_scene,
module Data.Glome.Clr,
module Data.Glome.Vec,
module Data.Glome.Solid,
module Data.Glome.Sphere,
module Data.Glome.Triangle,
module Data.Glome.Bih,
module Data.Glome.Csg,
module Data.Glome.Plane,
module Data.Glome.Box,
module Data.Glome.Bound,
module Data.Glome.Cone,
module Data.Glome.Tex) where
import Data.Glome.Clr
import Data.Glome.Vec
import Data.Glome.Solid
import Data.Glome.Sphere
import Data.Glome.Triangle
import Data.Glome.Bih
import Data.Glome.Csg
import Data.Glome.Plane
import Data.Glome.Box
import Data.Glome.Bound
import Data.Glome.Cone
import Data.Glome.Tex
--LIGHTS--
data Light = Light {litpos :: !Vec,
litcol :: !Color} deriving Show
light :: Vec -> Color -> Light
light pos clr = Light pos clr
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
primcount_scene :: Scene -> Pcount
primcount_scene (Scene sld _ _ _ _) = primcount sld