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 から_ビューポート_って概念が出てくるな。