OpenGL (5)

以下の resize 手続きをいろいろ弄くってみる。

(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)
  )

例えば gl-otrho の呼び出しを変更してみて以下。

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

これだとウィンドウの大きさにそって描画してる図形の大きさが変わる模様。むむ、と言いつつ gl-viewport 手続きの呼び出しをコメントアウトしてみると

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

今度は大きさは変わらないけど、表示位置が変わります。表示領域を設定する手続きを呼んでないから当たり前の話っちゃそうですが。
で、gl-load-identity って何なんだろ、と言いつつ以下にしてみたら

(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)
  )

リサイズするとどんどん小さくなって見えなくなった。GLUTによる「手抜き」OpenGL入門には_これは変換行列を初期化します_とあるんですが若干意味不明。

やはり

OpenGL Programming Guide を読め、という事なのか。Version 1.1 ってのが微妙に気になりますが、この週末はのんびりなのでゆっくり眺めてみる事に。