計算機プログラムの構造と解釈を読んでScheme勉強していますといっても、いったい何の役に立つの?と思っている人が多いと思います。
僕も実際、考え方はかなり勉強になっていますがまだ仕事やMonaに結びつけることが出来ていません。
こういう状態が長く続くとモヤモヤとするものですが、もうすぐ図形言語の勉強に入るということもあって、「見た目重要」な部分にチャレンジしてみます。
ウィンドウを表示して絵を出したい!
画面描画にはGauche-glを使います。
Gauche-glはGaucheからOpen GLライブラリ(もしくは互換ライブラリ)を操作するためのライブラリです。
使い方・インストールはGauche-glのドキュメントを参照されると良いでしょう。
ここではひげぽんの以下のような環境での場合のインストール・動くまでを紹介します。
環境
インストール・動作確認
インストールはとても簡単で
apt-get install gauche-gl
で終了です。
gauche-glにはおなじみの gears サンプルが付属しているので実行してみます。
colinux% gosh /usr/share/doc/gauche-gl/examples/gears.scm freeglut (/usr/share/doc/gauche-gl/examples/gears.scm): failed to open display ''
これは環境変数DISPLAYが設定されていないだけなので自分の環境に合わせて
export DISPLAY=192.168.99.1
とすれば解決します。
ウィンドウの表示
GLUTによる「手抜き」OpenGL入門のC言語のソースを脳内変換してSchemeで書いてみました。
ウィンドウを表示するだけ。
(use gl) (use gl.glut) (define (main args) (glut-init args) (glut-create-window "create window sample") (glut-main-loop) )
ウィンドウを塗りつぶす
displayがcallbackになっています。
(define (main args) (glut-init args) (glut-init-display-mode GLUT_RGBA) (glut-create-window "fill window sample") (glut-display-func display) (init) (glut-main-loop) ) (define (display) (gl-clear GL_COLOR_BUFFER_BIT) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 1.0 1.0) )
線を引く
(use gl) (use gl.glut) (define (main args) (glut-init args) (glut-init-display-mode GLUT_RGBA) (glut-create-window "draw line sample") (glut-display-func display) (init) (glut-main-loop) ) (define (display) (gl-color 1.0 0.0 0.0) (gl-begin GL_LINE_LOOP) (gl-vertex -0.9 -0.9) (gl-vertex 0.9 -0.9) (gl-vertex 0.9 0.9) (gl-vertex -0.9 0.9) (gl-end) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 1.0 1.0) )
画像ファイルを読み込む
Gauche-gl : OpenGL binding for Gaucheを読むと、
Function: read-sgi-image filename
を使えば良さそうなのですが、ちょっとギブ気味。
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404