packages feed

HRay-1.1: HRayOutput.lhs

	module HRayOutput, which contains IO related functions
	intended for usage with the other modules in the HRay package

   	author: Kenneth Hoste, 2004-2005
	part of a masters thesis at the University of Ghent, Belgium

	==========================================================================

> module HRayOutput (getRenderTime, createPPM, getImage) where

> import HRayEngine (Resolution, Color, Scene, rayTrace)


	determines the render time given the start and end cpu time 

> getRenderTime :: Integer -> Integer -> String
> getRenderTime before after = (show min) ++ "m" ++ secStr ++ "s"
>   where
>       total  = div (after - before) (10^12)
>       sec    = mod total 60
>       secStr = if (sec < 10) then "0" ++ (show sec) else show sec
>       min    = div total 60

	determines the array of colors representing an image

> getImage :: Int -> Resolution -> Scene -> [Color]
> getImage d r@(rx,ry) s = [image (fromIntegral x,fromIntegral (-y)) | y <- [-(ry-1)..0], x <- [0..(rx-1)]]
>   where
>	image = rayTrace d r s

        transforms a list of colors into a portable pixmap (PPM) file

> createPPM :: Resolution -> [Color] -> String
> createPPM (w,h) colors = ("P3\n"++) . shows w . (' ':) . shows h . ("\n255\n"++) 
>			           . stringify colors $ ""
>                 where stringify = flip $ foldr showC
>                       showC (r,g,b) = shows (round (r*255)) . (' ':) . shows (round (g*255)) 
>					. (' ':) . shows (round (b*255)) . (' ':)



	possible speed up: working without the use of string
	but using hPutBuf (System.IO) instead
	documentation on Ptr: http://www.cse.unsw.edu.au/~chak/haskell/ffi