@@ -2,7 +2,7 @@
22module Box where
33
44import MJS (V3,M4x4,v3,makeRotate,makePerspective,makeLookAt,mul)
5−import Graphics.WebGL (Program, link, Triangle, zipTriangle, Buffer, bind, Model, encapsulate, webgl)
5+import Graphics.WebGL (Triangle, zipTriangle, Shader, Model, model, webgl)
66import Window(dimensions)
77
88-- Define what our geometry looks like
@@ -39,6 +39,7 @@ colors = concat . map (\c -> repeat 2 (c,c,c)) <| [gray,red,green,blue,yellow,pu
3939mesh : [Triangle {pos : V3, color : V3}]
4040mesh = zipWith (zipTriangle (\pos color -> { pos = pos, color = color })) positions colors
4141
42+vert : Shader {a | pos : V3, color : V3} {b | rot : M4x4, per : M4x4, cam : M4x4} {vcolor : V3}
4243vert = [glShader|
4344attribute vec3 pos;
4445attribute vec3 color;
@@ -52,19 +53,16 @@ void main () {
5253}
5354|]
5455
56+frag : Shader {} {b | shade : Float} {vcolor : V3}
5557frag = [glShader|
5658precision mediump float;
59+uniform float shade;
5760varying vec3 vcolor;
5861void main () {
59− gl_FragColor = vec4(vcolor, 1.0);
62+ gl_FragColor = shade * vec4(vcolor, 1.0);
6063}
6164|]
6265
63−prog = link vert frag
64−
65−buf : Buffer {pos : V3, color : V3}
66−buf = bind mesh
67−
6866per : M4x4
6967per = makePerspective 45 1 0.01 100
7068
@@ -74,10 +72,11 @@ cam = makeLookAt (v3 0 0 5) (v3 0 0 0) (v3 0 1 0)
7472angle : Signal Float
7573angle = foldp (\_ n -> n + 0.02) 0 (fps 25)
7674
77−rot = (\t -> { rot = mul (makeRotate (3*t) (v3 0 1 0)) (makeRotate (2*t) (v3 1 0 0)), per = per, cam = cam }) <~ angle
75+rot : Signal { rot : M4x4, per : M4x4, cam : M4x4, shade : Float }
76+rot = (\t -> { rot = mul (makeRotate (3*t) (v3 0 1 0)) (makeRotate (2*t) (v3 1 0 0)), per = per, cam = cam, shade = 0.8 }) <~ angle
7877
7978draw : Signal [Model]
80−draw = combine [ (encapsulate prog buf) <~ rot ]
79+draw = combine [ (\rot -> (model vert frag mesh rot)) <~ rot ]
8180
8281main = webgl <~ dimensions ~ draw
8382