packages feed

jort-1.0.0: Textures.hs

module Textures where

import Basics
import Data.Bits( (.&.), xor )
import Colors(blackColor)

matte :: Color -> Texture
matte col = const Material 
	    {diffuse = col,
	     materialReflection = blackColor,
	     materialRefraction = blackColor,
	     materialRefrCoef = 0
	    }
  
checkboard :: Vector -> Texture -> Texture -> Texture
-- mix two texture in a chequer board fashion

checkboard unit m1 m2 v = if d .&. 1 == 0 then m1 v else m2 v
    where d = floor x `xor` floor y `xor` floor z 
	  d :: Int
	  Vector x y z = v `rowProd` invUnit
	  invUnit = liftV (1/) unit
	 

project :: Vector -> Texture -> Texture
-- project a given texture on a plane (axis .* x = 0)
project axis t x = t x0
    where x0 = x - (axis .* x) `scale` axis