初めての LablGL


住井さんのすばらしくよくできたチュートリアルに導かれて、初めての Open GL のアプリケーションを書きました。

わずか 32 行の O’Caml のコードでこんなのが見られます。とっても簡単。

以下が全プログラム(main.ml)。基本的に住井さんのコードのままです。一箇所 lablgl のバージョンの違いで、ラベルのつけ方が変わっていたところがありました。((たしか GlLight.light))あとインタプリタを使っていた住井さんのコードでは Glut.init に Sys.argv を渡していたのですが、コンパイラの場合は静的に初期化されそうな気がしたので空の配列を渡しています。

let initialize () =
ignore (Glut.init [| |]);
ignore (Glut.createWindow “Social Cosmo Browser”);
GlClear.color (0., 0., 0.);

Gl.enable `lighting;
GlLight.light 1 (`ambient (1., 1., 1., 1.));
List.iter (GlLight.light ~num: 2)
[ `diffuse (1., 0., 0., 1.); `position (1., 0., 0., 0.) ];
List.iter (GlLight.light ~num: 3)
[ `diffuse (0., 0., 1., 1.); `position (-1., 0., 0., 0.) ];
List.iter Gl.enable [ `light1; `light2; `light3 ];;

let display () =
GlClear.clear [`color];
Glut.solidTeapot 0.5;
Gl.flush();;

let keyboard ~key ~x ~y =
if key = int_of_char ‘q’ then exit 0;
GlMat.rotate ~angle:2.0 ~x:0.25 ~y:0.5 ~z:1.0 ();
display ();;

let _ =
initialize ();
Glut.displayFunc ~cb: display;
Glut.keyboardFunc keyboard;
Glut.mainLoop ()

あと、omake ユーザのために OMakefile も披露します。住井さんのチュートリアルはインタプリタの使い方でしたので、コンパイルの仕方はこちらが参考になることでしょう。

OCAMLINCLUDES += +lablgl
OCAML_OTHER_LIBS += lablgl lablglut
OCamlProgram(main, main)