gpt4 book ai didi

opengl - 每个 OpenGL/GLUT 循环迭代的新 StdGen

转载 作者:行者123 更新时间:2023-12-04 05:16:15 25 4
gpt4 key购买 nike

我有一个使用 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

但是 display 每次调用 getStdGen 都采用相同的 StdGen。我想要的是来自 let (cols,gen2)... 行的 gen2下次用作生成器,但显然这需要某种可变状态或类似性质的东西。

做我所问的最好的方法是什么,这样每次显示运行时我都会得到不同的随机性?

最佳答案

既然你在 IO无论如何,你可以只存储 gen2通过 setStdGen :

setStdGen gen2

所以你的下一轮从上一次停止的地方开始。

另一种选择是 split StdGen并使用 newStdGen 使用结果之一而不是 getStdGen .

关于opengl - 每个 OpenGL/GLUT 循环迭代的新 StdGen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com