Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. {-# LANGUAGE ScopedTypeVariables #-}
  2. {-# LANGUAGE ViewPatterns #-}
  3.  
  4. module Main where
  5.  
  6. import Common.Type
  7. import Config
  8. import Ray.Trace
  9. import Scene.Light
  10. import Scene.Object
  11. import Scene.World
  12.  
  13. import Data.Array.Accelerate as A
  14. import Data.Array.Accelerate.Data.Colour.Names
  15. import Data.Array.Accelerate.Data.Colour.RGB
  16. import Data.Array.Accelerate.Data.Functor as F
  17. import Data.Array.Accelerate.IO.Codec.BMP
  18. import Data.Array.Accelerate.Linear.V3
  19. import Data.Array.Accelerate.Linear.Vector
  20. --import Data.Array.Accelerate.LLVM.Native as CPU
  21. import Data.Array.Accelerate.LLVM.PTX as PTX
  22. import Data.Array.Accelerate.System.Random.MWC
  23.  
  24. import Control.Lens
  25. import System.Console.ParseArgs
  26.  
  27. import qualified Prelude as P
  28.  
  29.  
  30. gamma :: Exp Colour -> Exp Colour
  31. gamma (unlift -> (RGB (r :: Exp Float) (g :: Exp Float) (b :: Exp Float))) = lift $ RGB (f r) (f g) (f b)
  32. where
  33. reinhard :: Exp Float -> Exp Float
  34. reinhard x = x/(x + constant 2)
  35.  
  36. gamma :: Exp Float -> Exp Float
  37. gamma = P.flip (A.**) (1 / 2.2)
  38.  
  39. f = gamma . reinhard
  40.  
  41. -- (conf, opts, rest) <- parseArgsIO options defaults header footer
  42. main :: P.IO ()
  43. main = do
  44. let width = view configWidth defaults
  45. height = view configHeight defaults
  46.  
  47. noise :: Array DIM2 Float <- randomArray (uniformR (0, 1)) (Z :. height :. width)
  48.  
  49. let fov = pi / 4
  50. estimator =
  51. rotate
  52. -- (union (sphere 1) (cube (1 / P.sqrt 2)))
  53. (torus 1 0.5)
  54. (eulerRotation (pi / 3) (pi / 3) (pi / 3))
  55. eye = constant (V3 0 0 (-5))
  56. lights =
  57. A.use $ fromList (Z :. 2)
  58. [ Light (V3 10 10 (-10)) mistyRose
  59. , Light (V3 (-10) (-10) (-10)) mintCream
  60. -- , Light (V3 0 0 (-2)) white
  61. ]
  62.  
  63. scene = Scene estimator eye lights (constant white) 1000 0.00001
  64. eyeDir = castViewRays width height fov
  65. img =
  66. map packRGB . map gamma $
  67. A.zipWith (simpleShading scene) eyeDir (A.use noise)
  68.  
  69. writeImageToBMP "render.bmp" (run img)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement