将中的交互添加到场景图中(在Haskell中)



我在Haskell中制作了一个场景图函数渲染引擎,想知道如何在混合中添加交互。

一开始,我想我可以有另一个Handler节点,它接收其他节点中的一个,然后对它应用一些IORef。例如,如果我有

x,y,z <- IORef 0
KeyboardHandler KeyboardCallBack $ Translate x y z $ Object

当穿越时,我会有

KeyboardHandler keyboard drawable -> case drawable of 
Translate x y z _ -> do 
(Char 'q') -> x $~! (-1)
(Char 'w') -> x $~! (+1)
(Char 'a') -> y $~! (-1)
(Char 's') -> y $~! (+1)
(Char 'z') -> z $~! (-1)
(Char 'x') -> z $~! (+1)
render drawable

有可能做那样的事情吗?还是我走错了路?

这种方法可能有效,但也有更好的方法。我特别喜欢使用TQueue的GLFW-b示例。

TQueue是Transactional Queue的缩写;它是您可以从渲染线程将事件传递到中,然后从绘图线程读取它们的东西。这样你就可以把它们当作一个简单、纯粹的价值来处理;事件列表。

一般来说,Haskell倾向于纯操作而不是可变状态。可用的渲染框架强调将逻辑状态转换为屏幕上的内容。在这种情况下,像State OSG monad这样的东西可能还可以。

最新更新