OpenGL (3)
とりあえず、GLUTによる「手抜き」OpenGL入門を見つつ Gauche で書いてみる事に。
4.1 空のウィンドウを開く
以下。
(use gl) (use gl.glut) (define (disp) ) (define (main args) (glut-init args) (glut-create-window (car args)) (glut-display-func disp) (glut-main-loop) 0)
とりあえず透明なウィンドウが開きます。args の最初の要素は argv[0] なんスね。
4.2 ウィンドウを塗りつぶす
ツブしてみる。
(use gl) (use gl.glut) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 1.0 1.0) ) (define (main args) (glut-init args) (glut-init-display-mode GLUT_RGBA) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-main-loop) 0)
青で塗りつぶされた window が出力。
- GLUT-RGBA はお任せで使える模様
- ウィンドウを塗りつぶすソレは青で不透明、というモード
5.1 線を引く
図形言語の wave 君のソレは以下な方法で線を引いてました。
(define (draw-line s e) (gl-vertex (xcor-vect s) (ycor-vect s)) (gl-vertex (xcor-vect e) (ycor-vect e))) (define (segments->painter segment-list) (lambda (frame) (for-each (lambda (segment) (draw-line ((frame-coord-map frame) (start-segment segment)) ((frame-coord-map frame) (end-segment segment)))) segment-list)))
ここでは 4.2 の glClear 手続きを以下に変更してみる模様。
(define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (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-flush) )
実は上記になるまでに紆余曲折があったんですが略。座標としてはウィンドウの左下末端が (-1, -1) で右上端が (1, 1) な模様。上記だと左下から始まってぐるんと周回しているように見えます。
今日は
ここでヤメます。6 から_ビューポート_って概念が出てくるな。