2009-12-14 [長年日記]

[Haskell] HaskellでOpenGL (6)

OpenGL

点を指定するときに色も指定すると、間の色を補完してくれます。


import Control.Monad
import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT

main =
  do (progName, _) <- getArgsAndInitialize
     createWindow "Window"
     clearColor $= Color4 1.0 1.0 1.0 0.0
     displayCallback $= display
     mainLoop

display =
  do clear [ColorBuffer]
     let points :: [(Color3 GLfloat, (GLfloat, GLfloat))]
         points = [(Color3 1.0 0.0 0.0, ( 0.9,  0.9)),
                   (Color3 0.0 1.0 0.0, ( 0.9, -0.9)), 
                   (Color3 0.0 0.0 1.0, (-0.9, -0.9)),
                   (Color3 1.0 1.0 0.0, (-0.9,  0.9))]
     renderPrimitive Polygon $
       forM_ points $ \(c, (x, y)) ->
         do color c
            vertex $ Vertex2 x y
     flush

ところで、OpenGLライブラリから派生して作られたOGLでは、プリミティブなコマンド(renderPrimitiveの中で実行できるコマンド群)をPrimitiveGLモナドで、その他のコマンドもIOをnewtypeでラップしたGLモナドの中で実行するようになっていて、素のOpenGLライブラリよりも型安全になっているようです。


トップ «前の日記(2009-12-13) 最新 次の日記(2009-12-15)»