Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elm: 2D and 3D Graphics
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ulric Wilfred
June 19, 2017
Programming
550
1
Share
Elm: 2D and 3D Graphics
Munich Lambda Meetup 19 June 2017
Ulric Wilfred
June 19, 2017
More Decks by Ulric Wilfred
See All by Ulric Wilfred
Generative Animation with Elm
shamansir
0
240
The Future of Web UI Development
shamansir
0
150
iElm-Tech-JB.pdf
shamansir
0
130
"iElm"
shamansir
0
96
Elm Revolution
shamansir
0
110
Про Гит
shamansir
2
150
RPD — Reactive Patch Development, Extended Cut
shamansir
0
230
RPD: Reactive Patch Development
shamansir
0
320
Animatron Player API in Details v3
shamansir
0
470
Other Decks in Programming
See All in Programming
Make GenAI Production-Ready with Kubernetes Patterns
bibryam
0
120
ハンズオンで学ぶクラウドネイティブ
tatsukiminami
0
130
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
0
150
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
340
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
270
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
180
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
220
おれのAgentic Coding 2026/03
tsukasagr
1
150
Google Nest CamとApple Vision frameworkと猫🐈🐈⬛ / onishi50
yutailang0119
0
110
JOAI2026 1st solution - heron0519 -
heron0519
0
130
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
170
Claude Codeをカスタムして自分だけのClaude Codeを作ろう
terisuke
0
130
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
106
240k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Six Lessons from altMBA
skipperchong
29
4.2k
Docker and Python
trallard
47
3.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.8k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
240
Agile that works and the tools we love
rasmusluckow
331
21k
Building the Perfect Custom Keyboard
takai
2
730
The World Runs on Bad Software
bkeepers
PRO
72
12k
Faster Mobile Websites
deanohume
310
31k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
2D & 3D Graphics in Elm What we have
now and what we may do with this… by @shamansir, 2017
Write Art
What we have now…
Elm Time-Travelling Debugger (R.I.P. …?)
2D: elm-lang/svg view : Model -> Html Msg view model
= let angle = turns (Time.inMinutes model) handX = toString (50 + 40 * cos angle) handY = toString (50 + 40 * sin angle) in svg [ viewBox "0 0 100 100", width "300px" ] [ circle [ cx "50", cy "50", r "45", fill "#0B79CE" ] [] , line [ x1 "50", y1 "50", x2 handX, y2 handY , stroke "#023963" ] [] ]
2D: evancz/elm-graphics main : Element main = collage 300 300
(star blue) triangle color size angle = ngon 3 size |> filled color |> rotate (degrees angle) star color = map2 (triangle color) [100, 100] [30, 90]
3D: elm-community/webgl https://ellie-app.com/3wmPk4PGf8Ja1/0
3D: elm-community/webgl https://github.com/elm-community/webgl/blob/master/examples/first-person.elm
3D: TheSeamau5/GraphicsEngine import Engine (render, cube, pyramid, scene) import Math.Vector3
(vec3) myCube = { cube | position <- vec3 0 0 0, rotation <- vec3 45 0 45, scale <- vec3 1.5 1.5 1.5 } myPyramid = { pyramid | position <- vec3 2 0 0, scale <- vec3 0.5 1 0.5 } myScene = { scene | objects <- [myCube, myPyramid] } main = render myScene
What we may do with this…
fluxus https://github.com/zzkt/fluxus
shamansir/elm-fluxus https://github.com/shamansir/elm-fluxus https://vimeo.com/202176855
shamansir/elm-fluxus https://github.com/shamansir/elm-fluxus https://vimeo.com/202176855 import Math.Vector3 as Vec3 exposing (Vec3, vec3)
import Fluxus.Program as Fx import Fluxus.State exposing ( ..) import Fluxus.Primitive as Primitive exposing ( ..) drawRow : Int -> State -> State drawRow count state = if (count > 0) then state |> translate (vec3 4 0 0) |> drawCube |> rotate (vec3 (10 * (sin (time state))) 0 0) |> withState (\state -> state |> rotate (vec3 0 25 0) |> drawRow (count - 1) ) |> withState (\state -> state |> rotate (vec3 0 -25 0) |> drawRow (count - 1) ) else state main : Fx.FluxusProgram main = Fx.everyFrame (drawRow 10)
shamansir/elm-fluxus https://github.com/shamansir/elm-fluxus https://vimeo.com/202176855 drawRow count state = if (count >
0) then state |> translate (vec3 4 0 0) |> drawCube |> rotate (vec3 (10 * (sin (time state))) 0 0) |> withState (\state -> state |> rotate (vec3 0 25 0) |> drawRow (count - 1) ) |> withState (\state -> state |> rotate (vec3 0 -25 0) |> drawRow (count - 1) ) else state main = Fx.everyFrame (drawRow 10)
Pict3D from DrRacket
Pict3D from DrRacket
Pict3D from DrRacket http://docs.racket-lang.org/pict3d/constructors.html
So… Why bother?
3D REPL?
Playgrounds?
EVE by Chris Granger https://www.youtube.com/watch?v=5V1ynVyud4M
Chris Granger: In Search of Tomorrow https://www.youtube.com/watch? v=VZQoAKJPbh8&t=1047
Chris Granger: Aurora (2013)
Chris Granger: Aurora https://www.youtube.com/watch?v=L6iUm_Cqx2s
Apparatus http://aprt.us/
So… Why Elm?
None
Strict. Minimal. Functional. Web.
Bring functionaλ!
Bring fun!
Thanks. Yours, @shamansir