Haskell、OpenGL、および GLUT を使用して、多数のランダムな三角形を表示するプログラムがあります。ただし、クリックするたびにランダムな三角形を変更するか、その性質のものを変更したいと思います(変更する場合は重要ではありません)。
現在、私の作業コードは次のようになります。
main :: IO ()
main = do
(pname, _) <- getArgsAndInitialize
createWindow $ "Haskellisa"
-- TODO set based on command line args
windowSize $= (Size 640 480)
blend $= Enabled
blendFunc $= (SrcAlpha, OneMinusSrcAlpha)
displayCallback $= display
keyboardMouseCallback $= Just (keyboardMouse)
mainLoop
display :: IO ()
display = do
clear [ ColorBuffer ]
gen0 <- getStdGen
let (tris,gen1) = randomTris 10 gen0
let (cols,gen2) = randomColor4s 10 gen1
let triColPairs = zip tris cols
mapM_ (\(tri, col) -> drawTri tri col) triColPairs
flush
ただし、getStdGen を呼び出すと、表示は毎回同じ StdGen を使用します。私が望むのは、ラインのgen2がlet (cols,gen2)...
次回のジェネレーターとして使用されることですが、明らかにそれにはある種の可変状態またはその性質が必要です。
ディスプレイが実行されるたびに異なるランダム性が得られるように、私が求めていることを行う最良の方法は何ですか?