座標系によるtextureの上下反転について
textureは座標系によっては上下が反転してしまうことがあるみたい。
例えば、このようなコードを書いてデフォルトの座標系で画像を表示した際には、上下が正しく表示される。
(use gl.processing) (define texture #f) (define draw (draw-once$ (^ () (with-texture (draw-shape texture 100 100))))) (define main (setup$ (^ () (window 150 150 "foo") (set! texture (file->texture "lisp-glossy.jpg"))) :draw draw))
ところが、座標系を変えてみようと思い左下隅を原点にした座標系に変えた場合には、上下が反転してしまう。
これを修正するには、glMatrixModeでGL_TEXTUREという行列を変更すれば良いらしい。
具体的には以下のようなコードを加える。
(gl-matrix-mode GL_TEXTURE) (gl-load-identity) (gl-scale 1.0 -1.0 1.0)
これをflip-texture!という名前で関数として定義した。これによって、座標系を変えた場合にも画像は反転することなく表示できるようになる。
変更後のコード
(use gl.processing) (define texture #f) (define draw (draw-once$ (^ () (with-texture (draw-shape texture 100 100))) :save "foo3.png")) (define main (setup$ (^ () (window 150 150 "foo") (flip-texture!) (set! texture (file->texture "lisp-glossy.jpg"))) :draw draw :reshape (2d-reshape$ :style :gl)))