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