@@ -2,14 +2,15 @@
22module Crate where
33
44import Http (..)
5−import MJS (..)
5+import Math.Vector (..)
6+import Math.Matrix (..)
67import Graphics.WebGL (..)
78
89-- Define the mesh for a crate
9−crate : [Triangle { pos:V3, coord:V3 }]
10+crate : [Triangle { pos:Vec3, coord:Vec3 }]
1011crate = concatMap rotatedFace [ (0,0), (90,0), (180,0), (270,0), (0,90), (0,-90) ]
1112
12−rotatedFace : (Float,Float) -> [Triangle { pos:V3, coord:V3 }]
13+rotatedFace : (Float,Float) -> [Triangle { pos:Vec3, coord:Vec3 }]
1314rotatedFace (angleX,angleY) =
1415 let x = makeRotate (degrees angleX) (v3 1 0 0)
1516 y = makeRotate (degrees angleY) (v3 0 1 0)
@@ -17,7 +18,7 @@ rotatedFace (angleX,angleY) =
1718 in
1819 map (mapTriangle (\x -> {x | pos <- mul4x4 t x.pos })) face
1920
20−face : [Triangle { pos:V3, coord:V3 }]
21+face : [Triangle { pos:Vec3, coord:Vec3 }]
2122face =
2223 let topLeft = { pos = v3 -1 1 0, coord = v3 0 1 0 }
2324 topRight = { pos = v3 1 1 0, coord = v3 1 1 0 }
@@ -27,7 +28,7 @@ face =
2728 [ (topLeft,topRight,bottomLeft), (bottomLeft,topRight,bottomRight) ]
2829
2930-- View
30−view : Float -> M4x4
31+view : Float -> Mat4
3132view angle =
3233 foldr1 mul [ perspective
3334 , camera
@@ -35,10 +36,10 @@ view angle =
3536 , makeRotate (2*angle) (v3 1 0 0)
3637 ]
3738
38−perspective : M4x4
39+perspective : Mat4
3940perspective = makePerspective 45 1 0.01 100
4041
41−camera : M4x4
42+camera : Mat4
4243camera = makeLookAt (v3 0 0 5) (v3 0 0 0) (v3 0 1 0)
4344
4445-- Putting it together
@@ -48,7 +49,7 @@ main = webgl (400,400) <~ lift2 scene (loadTex "woodCrate.jpg") (view <~ angle)
4849angle : Signal Float
4950angle = foldp (\dt theta -> theta + dt / 10000) 0 (fps 25)
5051
51−scene : Response Texture -> M4x4 -> [Model]
52+scene : Response Texture -> Mat4 -> [Model]
5253scene response view =
5354 case response of
5455 Waiting -> []
@@ -56,7 +57,7 @@ scene response view =
5657 Success tex -> [model vertexShader fragmentShader crate { crate = tex, view = view }]
5758
5859-- Shaders
59−vertexShader : Shader { pos:V3, coord:V3 } { u | view:M4x4 } { vcoord:V2 }
60+vertexShader : Shader { pos:Vec3, coord:Vec3 } { u | view:Mat4 } { vcoord:Vec2 }
6061vertexShader = [glShader|
6162
6263attribute vec3 pos;
@@ -70,7 +71,7 @@ void main () {
7071
7172|]
7273
73−fragmentShader : Shader {} { u | crate:Texture } { vcoord:V2 }
74+fragmentShader : Shader {} { u | crate:Texture } { vcoord:Vec2 }
7475fragmentShader = [glShader|
7576
7677precision mediump float;