-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathCompose.purs
More file actions
63 lines (56 loc) · 3 KB
/
Copy pathCompose.purs
File metadata and controls
63 lines (56 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
module Mathbox.Examples.Compose where
import Prelude (map, (>>=), ($), negate, (*), (+))
import Data.Function.Uncurried (runFn4, mkFn4, runFn3, mkFn3, mkFn5)
import Data.List (List(..), (:))
import Data.Maybe (Maybe(..))
import Effect (Effect)
import Foreign
import Math as Math
import Prim as P
import Mathbox.Classes as C
import Mathbox.Field
import Mathbox.Mathbox
import Mathbox.Types
ex :: In5 Ch4 It1
ex = mkFn5 ( \emit x y i j -> do
runFn4 emit x y 0.0 1.0
)
ex2 :: In3 Ch3 It1
ex2 = mkFn3 ( \emit x i -> do
runFn3 emit x 0.0 0.0
)
ex3 :: In4 Ch4 It1
ex3 = mkFn4 ( \emit x i t -> do
let y = Math.sin(x + t) * 0.5 + 0.5
runFn4 emit y y y 1.0
)
mathbox :: List MathboxPrimitive
mathbox =
(Camera $ C.mkCamera { proxy = Val true, position = Just $ Val (mkVec3 0 0 3) }) :
(Cartesian $ C.mkCartesian { range = Val [mkVec2 (-2) 2, mkVec2 (-1) 1, mkVec2 (-1) 1], scale = Val (mkVec3 2 1 1) }) (
(Grid $ C.mkGrid { color = Val $ unsafeMkColor "black", divideX = Val 2.0, divideY = Val 2.0, zBias = Val 10.0, opacity = Val 0.75 }) :
(RTT $ C.mkRTT { type = Val TypeUnsignedByte }) (
(Camera $ C.mkCamera { lookAt = Just $ Val $ mkVec3 0 0 0, position = Just (Fun (\t -> [Math.cos(t) * 3.0, Math.sin(t * 0.271), Math.sin(t) * 3.0])) }) :
(Cartesian $ C.mkCartesian { range = Val [mkVec2 (-2) 2, mkVec2 (-1) 1, mkVec2 (-1) 1], scale = Val (mkVec3 2 1 1) }) (
(Grid $ C.mkGrid { color = Val $ unsafeMkColor "black", divideX = Val 2.0, divideY = Val 2.0, zBias = Val 10.0, opacity = Val 0.75 }) :
Nil
) :
Nil
) :
(Compose $ C.mkCompose { color = Val $ unsafeMkColor "#fff", opacity = Val 0.5, zWrite = Val false }) :
(Area $ C.mkArea { width = Just $ Val 16, height = Just $ Val 16, rangeX = Just $ Val $ mkVec2 0 1, rangeY = Just $ Val $ mkVec2 0 1, expr = Just (Val $ unsafeToForeign ex), minFilter = Val $ FilterLinear, magFilter = Val $ FilterLinear }) :
(Interval $ C.mkInterval { width = Just $ Val $ 16, range = Just $ Val $ mkVec2 0 1, expr = Just (Val $ unsafeToForeign ex2), minFilter = Val $ FilterLinear, magFilter = Val $ FilterLinear }) :
(Compose $ C.mkCompose { color = Val $ unsafeMkColor "#fff", opacity = Val 0.333, zWrite = Val false }) :
(Area $ C.mkArea { width = Just $ Val 3, height = Just $ Val 16 }) :
(Interval $ C.mkInterval { width = Just $ Val $ 8, minFilter = Val $ FilterLinear, magFilter = Val $ FilterLinear, expr = Just (Val $ unsafeToForeign ex3) }) :
(Surface $ C.mkSurface { color = Val $ unsafeMkColor "#ffffff", points = Val $ mkSelect ["<<"], map = Just $ Val $ mkSelect ["<"], zBias = Val (-5.0) }) :
(Compose $ C.mkCompose { color = Val $ unsafeMkColor "#fff", opacity = Val 0.333, zWrite = Val false }) :
Nil
) :
Nil
main :: Effect Mathbox
main = do
mkMathbox { plugins: ["core", "controls", "cursor"], controls: { klass: orbitControls } } >>=
applyOnThree (setThreeClearColor colorWhite 1.0) >>=
set { scale: Just 500.0, focus: Just 3.0 } >>=
addAll (map toJs mathbox)