Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {-# LANGUAGE ScopedTypeVariables #-}
- {-# LANGUAGE ViewPatterns #-}
- module Main where
- import Common.Type
- import Config
- import Ray.Trace
- import Scene.Light
- import Scene.Object
- import Scene.World
- import Data.Array.Accelerate as A
- import Data.Array.Accelerate.Data.Colour.Names
- import Data.Array.Accelerate.Data.Colour.RGB
- import Data.Array.Accelerate.Data.Functor as F
- import Data.Array.Accelerate.IO.Codec.BMP
- import Data.Array.Accelerate.Linear.V3
- import Data.Array.Accelerate.Linear.Vector
- --import Data.Array.Accelerate.LLVM.Native as CPU
- import Data.Array.Accelerate.LLVM.PTX as PTX
- import Data.Array.Accelerate.System.Random.MWC
- import Control.Lens
- import System.Console.ParseArgs
- import qualified Prelude as P
- gamma :: Exp Colour -> Exp Colour
- gamma (unlift -> (RGB (r :: Exp Float) (g :: Exp Float) (b :: Exp Float))) = lift $ RGB (f r) (f g) (f b)
- where
- reinhard :: Exp Float -> Exp Float
- reinhard x = x/(x + constant 2)
- gamma :: Exp Float -> Exp Float
- gamma = P.flip (A.**) (1 / 2.2)
- f = gamma . reinhard
- -- (conf, opts, rest) <- parseArgsIO options defaults header footer
- main :: P.IO ()
- main = do
- let width = view configWidth defaults
- height = view configHeight defaults
- noise :: Array DIM2 Float <- randomArray (uniformR (0, 1)) (Z :. height :. width)
- let fov = pi / 4
- estimator =
- rotate
- -- (union (sphere 1) (cube (1 / P.sqrt 2)))
- (torus 1 0.5)
- (eulerRotation (pi / 3) (pi / 3) (pi / 3))
- eye = constant (V3 0 0 (-5))
- lights =
- A.use $ fromList (Z :. 2)
- [ Light (V3 10 10 (-10)) mistyRose
- , Light (V3 (-10) (-10) (-10)) mintCream
- -- , Light (V3 0 0 (-2)) white
- ]
- scene = Scene estimator eye lights (constant white) 1000 0.00001
- eyeDir = castViewRays width height fov
- img =
- map packRGB . map gamma $
- A.zipWith (simpleShading scene) eyeDir (A.use noise)
- writeImageToBMP "render.bmp" (run img)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement