let vertices = [ ( 0.607, 0.000, 0.795); ( 0.188, 0.577, 0.795); (-0.491, 0.357, 0.795); (-0.491, -0.357, 0.795); ( 0.188, -0.577, 0.795); ( 0.982, 0.000, 0.188); ( 0.304, 0.934, 0.188); (-0.795, 0.577, 0.188); (-0.795, -0.577, 0.188); ( 0.304, -0.934, 0.188); ( 0.795, 0.577, -0.188); (-0.304, 0.934, -0.188); (-0.982, 0.000, -0.188); (-0.304, -0.934, -0.188); ( 0.795, -0.577, -0.188); ( 0.491, 0.357, -0.795); (-0.188, 0.577, -0.795); (-0.607, 0.000, -0.795); (-0.188, -0.577, -0.795); ( 0.491, -0.357, -0.795);] let faces = [ List.rev[0; 1; 2; 3; 4]; [0; 1; 6; 10; 5]; [1; 2; 7; 11; 6]; [2; 3; 8; 12; 7]; [3; 4; 9; 13; 8]; [4; 0; 5; 14; 9]; List.rev[15; 16; 11; 6; 10]; List.rev[16; 17; 12; 7; 11]; List.rev[17; 18; 13; 8; 12]; List.rev[18; 19; 14; 9; 13]; List.rev[19; 15; 10; 5; 14]; [15; 16; 17; 18; 19];] let color = [ (1.0, 0.0, 0.0); (0.0, 1.0, 0.0); (0.0, 0.0, 1.0); (0.0, 1.0, 1.0); (1.0, 0.0, 1.0); (1.0, 1.0, 0.0); (0.0, 0.0, 0.0); (1.0, 1.0, 1.0); (0.2, 0.2, 0.2); (0.4, 0.4, 0.4); (0.6, 0.6, 0.6); (0.8, 0.8, 0.8);] let name = "Dodecahedron" let display () = GlClear.clear [`color]; List.iter2 (fun face color -> GlDraw.color color; GlDraw.begins `polygon; List.iter (fun i -> GlDraw.vertex3 (List.nth vertices i)) face; GlDraw.ends (); ) faces color; Gl.flush (); Glut.swapBuffers ();; let keyboard ~key ~x ~y = match key with | 27 -> exit 0 | 119 -> GlMat.rotate ~angle: 2.0 ~x:1.0 (); display () (* up *) | 115 -> GlMat.rotate ~angle:(-.2.0) ~x:1.0 (); display () (* down *) | 97 -> GlMat.rotate ~angle: 2.0 ~y:1.0 (); display () (* left *) | 100 -> GlMat.rotate ~angle:(-.2.0) ~y:1.0 (); display () (* right *) | 113 -> GlMat.rotate ~angle: 2.0 ~z:1.0 (); display () (* spin left *) | 101 -> GlMat.rotate ~angle:(-.2.0) ~z:1.0 (); display () (* spin right *) | _ -> Printf.printf "Unknown key: %d\n" key;; let main () = ignore(Glut.init Sys.argv); Glut.initDisplayMode ~alpha:true ~depth:true () ; Glut.initWindowSize ~w:500 ~h:500 ; ignore(Glut.createWindow ~title:name); GlMat.ortho ~x:(-1.2, 1.2) ~y:(-1.2, 1.2) ~z:(-1.2, 1.2); GlDraw.cull_face `back; Gl.enable `cull_face; GlClear.color (0.5, 0.5, 0.5); (* цвет фона *) Glut.displayFunc ~cb:display; Glut.keyboardFunc ~cb:keyboard; Glut.mainLoop (); ;; main ();;