-
Notifications
You must be signed in to change notification settings - Fork 1
/
pencil.ml
57 lines (43 loc) · 1.43 KB
/
pencil.ml
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
(* Copyright 2007-2010 Grant T. Olson. See LICENSE file for license terms
and conditions *)
(* abstract the opengl modelview matrix behind an intuitive pencil *)
open Foot
let init () =
GlMat.mode `modelview;
GlMat.load_identity ()
let draw_square x1 x2 y1 y2 =
GlDraw.begins `quads;
GlDraw.vertex3 (x1, y1, 0.0);
GlDraw.vertex3 (x1, y2, 0.0);
GlDraw.vertex3 (x2, y2, 0.0);
GlDraw.vertex3 (x2, y1, 0.0);
GlDraw.ends ()
let ink_color r g b a =
GlLight.material `front (`specular (r, g, b, a));
GlLight.material `front (`diffuse (r *. 0.5, g *. 0.5, b *. 0.5, a));
GlLight.material `front (`ambient (r *. 0.5, g *. 0.5, b *. 0.5, a))
let save_pos () =
GlMat.push ()
let restore_pos () =
GlMat.pop ()
let move_right x =
let x = float_of_foot x in
GlMat.translate ~x:x ()
let move_left x =
let x = float_of_foot x in
GlMat.translate ~x:(-. x) ()
let move_up y =
let y = float_of_foot (y) in
GlMat.translate ~y:y ()
let move_down y =
let y = float_of_foot y in
GlMat.translate ~y:(-. y) ()
let spin_paper_clockwise angle =
GlMat.rotate ~angle:angle ~z:1.0 ()
let spin_paper_counterclockwise angle =
GlMat.rotate ~angle:(-. angle) ~z:1.0 ()
let is_onscreen () =
let x,y,z = GluMat.project(0.0,0.0,0.0) in
let x_bounds = x > -25.0 && x < 525.0 in
let y_bounds = y > -25.0 && y < 525.0 in
x_bounds && y_bounds