
点を指定するときに色も指定すると、間の色を補完してくれます。
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ライブラリよりも型安全になっているようです。