OpenGL (4)

5.1 線を引く

以下なナニをでっち上げた。

(use gl)
(use gl.glut)

(define (disp)
  (gl-clear GL_COLOR_BUFFER_BIT)
  (gl-begin* GL_LINE_LOOP
    (gl-vertex 0.0 0.6)
    (gl-vertex 0.3 -0.6)
    (gl-vertex -0.6 0.3)
    (gl-vertex 0.6 0.3)
    (gl-vertex -0.3 -0.6)
  )
  (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)

微妙な星印。ウィンドウのリサイズで星の大きさも変わります。色云々は無視してこのまま 6.座標軸を設定する、に行きます。

そーゆー意味では現状は

  • ウィンドウの左下の座標が (-1.0 -1.0)
  • ウィンドウの右上の座標が (1.0 1.0)

に固定されてる模様。

6.1 座標軸とビューポート

表示内容の大きさを変えずに表示領域のみを広げるように、との事。上記のソレに若干のコードを追加。差分ではなく全部を以下に引用。

(use gl)
(use gl.glut)

(define (resize w h)
  (gl-viewport 0 0 w h)
  (gl-load-identity)
  (gl-ortho (- (/ w 200.0)) (/ w 200.0) (- (/ h 200.0)) (/ h 200.0) -1.0 1.0)
  )

(define (disp)
  (gl-clear GL_COLOR_BUFFER_BIT)
  (gl-begin* GL_LINE_LOOP
    (gl-vertex 0.0 0.6)
    (gl-vertex 0.3 -0.6)
    (gl-vertex -0.6 0.3)
    (gl-vertex 0.6 0.3)
    (gl-vertex -0.3 -0.6)
  )
  (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))
  (glut-display-func disp)
  (glut-reshape-func resize)
  (init)
  (glut-main-loop)
  0)
  • gl-viewport でウィンドウ全体をビューポートにして
    • ビューポートは実際に描画が行なわれる領域
    • 上記の例だとウィンドウ全体?
  • gl-load-identity で変換行列を初期化して
  • gl-ortho で (ry

限界気味ながらもドキュメント読んでみます。何か分かれば追記します。