Created
April 15, 2020 23:05
-
-
Save mbacarella/163126e87638b718ffcfb8c1e9a3f60d to your computer and use it in GitHub Desktop.
rough translation of three.js hello world into ocaml (js_of_ocaml)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
open Js_of_ocaml | |
let main () = | |
let doc = Dom_html.document in | |
let inner_width = | |
Js.Optdef.get Dom_html.window##.innerWidth (fun () -> 1000) | |
in | |
let inner_height = | |
Js.Optdef.get Dom_html.window##.innerHeight (fun () -> 500) | |
in | |
let three = Js.Unsafe.global##._THREE in | |
let scene_constr = three##._Scene in | |
let perspective_camera_constr = three##._PerspectiveCamera in | |
let renderer_constr = three##.WebGLRenderer in | |
let scene = new%js scene_constr in | |
let camera = | |
(new%js perspective_camera_constr) 75 | |
(inner_width / inner_height) 0.1 1000 | |
in | |
camera##.position##.z := 4; | |
let renderer = | |
let args = Js.Unsafe.js_expr "{ antialias: true }" in | |
(new%js renderer_constr) args | |
in | |
let cube = | |
let geometry_constr = three##._BoxGeometry in | |
let material_constr = three##._MeshBasicMaterial in | |
let mesh_constr = three##._Mesh in | |
let geometry = (new%js geometry_constr) 1 1 1 in | |
let material = | |
let args = Js.Unsafe.js_expr "{ color: \"#433F81\" }" in | |
(new%js material_constr) args | |
in | |
let cube = (new%js mesh_constr) geometry material in | |
cube | |
in | |
let requestAnimationFrame f = | |
Js.Unsafe.fun_call (Js.Unsafe.js_expr "requestAnimationFrame") | |
[| Js.Unsafe.inject f |] | |
in | |
let rec render () = | |
let () = requestAnimationFrame render in | |
cube##.rotation##.x := cube##.rotation##.x +. 0.01; | |
cube##.rotation##.y := cube##.rotation##.y +. 0.01; | |
renderer##render scene camera; | |
in | |
let _ = renderer##setClearColor (Js.string "#000000") in | |
let _ = renderer##setSize inner_width inner_height in | |
Dom.appendChild doc##.body renderer##.domElement; | |
let () = scene##add cube in | |
render () | |
let () = main () |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment