Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell的GLUT窗口中,人们如何应对鼠标滚轮事件?_Haskell_Glut_Mousewheel_Glfw - Fatal编程技术网

在Haskell的GLUT窗口中,人们如何应对鼠标滚轮事件?

在Haskell的GLUT窗口中,人们如何应对鼠标滚轮事件?,haskell,glut,mousewheel,glfw,Haskell,Glut,Mousewheel,Glfw,我正在使用OpenGL软件包,也在使用GLUT软件包。尽管GLUT软件包似乎有一个鼠标滚轮回调,但它似乎不起作用 所以。。。在GLUT创建的窗口中,如何访问鼠标滚轮事件?OpenGL不创建窗口。从本质上讲,它只是一组用来画东西的函数。事件处理完全超出了OpenGL的范围。GLUT不是OpenGL的核心部分。这是一个相当古老的库,目的是使编写简单的OpenGL教程变得容易。没别的了 与GLUT不同的是,您应该使用远远优于GLFW的GLFW,对于GLFW,还存在优秀的Haskell绑定:OpenGL

我正在使用OpenGL软件包,也在使用GLUT软件包。尽管GLUT软件包似乎有一个鼠标滚轮回调,但它似乎不起作用


所以。。。在GLUT创建的窗口中,如何访问鼠标滚轮事件?

OpenGL不创建窗口。从本质上讲,它只是一组用来画东西的函数。事件处理完全超出了OpenGL的范围。GLUT不是OpenGL的核心部分。这是一个相当古老的库,目的是使编写简单的OpenGL教程变得容易。没别的了


与GLUT不同的是,您应该使用远远优于GLFW的GLFW,对于GLFW,还存在优秀的Haskell绑定:

OpenGL不创建窗口。从本质上讲,它只是一组用来画东西的函数。事件处理完全超出了OpenGL的范围。GLUT不是OpenGL的核心部分。这是一个相当古老的库,目的是使编写简单的OpenGL教程变得容易。没别的了


您应该使用远远优于GLFW的GLFW,而不是GLUT,对于GLFW,还存在优秀的Haskell绑定:

只是为了添加另一个选项


当我受够了供过于求的时候,我转而选择了。wiki上有几个简单的示例演示GtkGLext。

只是为了添加另一个选项


当我受够了供过于求的时候,我转而选择了。wiki上有几个简单的示例演示GtkGLext。

我还建议避免过量。无论如何,这是相当有限的

如果您希望处理自己的主事件循环而不是使用回调,另一个选项是使用。是的,它是为游戏设计的,但它可以为您提供一个GL上下文,对于大多数不需要标准UI小部件的交互式OpenGL应用程序来说,它的工作状态已经足够好了。它提供键盘/鼠标事件、毫秒计时器和一些非常基本的窗口管理


有点无意义的事后编辑:我在评论中被告知GLFW还允许运行自己的事件循环。再看一遍,我完全同意GLFW是解决大多数不需要标准UI小部件的问题的方法。

我还建议避免过度使用。无论如何,这是相当有限的

如果您希望处理自己的主事件循环而不是使用回调,另一个选项是使用。是的,它是为游戏设计的,但它可以为您提供一个GL上下文,对于大多数不需要标准UI小部件的交互式OpenGL应用程序来说,它的工作状态已经足够好了。它提供键盘/鼠标事件、毫秒计时器和一些非常基本的窗口管理


有点无意义的事后编辑:我在评论中被告知GLFW还允许运行自己的事件循环。再看一遍之后,我完全同意GLFW是解决大多数不需要标准UI小部件的问题的方法。

使用GLFW,用户还可以维护一个自定义的主循环。@DatenWalf:哦,真的吗?哼!出于某种原因,我认为它也使用回调,但显然我自己从未使用过,所以我犯了错误。出于各种其他原因,最终总是使用SDL或gtk/wx之类的完整UI工具包。无论如何,谢谢你指出这一点!为完整起见,GLFW似乎可以用两种方式完成:自定义循环或注册回调。使用GLFW,还可以维护一个自定义主循环。@datenwolf:哦,真的吗?哼!出于某种原因,我认为它也使用回调,但显然我自己从未使用过,所以我犯了错误。出于各种其他原因,最终总是使用SDL或gtk/wx之类的完整UI工具包。无论如何,谢谢你指出这一点!为了完整性,GLFW似乎可以用两种方式来完成:自定义循环或注册回调!GLFW应用程序只能打开一个窗口。我需要多个。看来我需要用。。。WX?在wx或wxcore中找不到关于opengl的任何信息…@taotree:可能是wx或GTK。你想要一个WX中的GLCanvas;它似乎不存在于主包中,我猜是因为需求不足,但确实存在于wxcore中。我还不知道WX是否足够,因为它在wxcore中,但不在WX中。这是否意味着我仍然可以简单地使用它,或者它必须首先在wx中实现才能支持它?哎呀!GLFW应用程序只能打开一个窗口。我需要多个。看来我需要用。。。WX?在wx或wxcore中找不到关于opengl的任何信息…@taotree:可能是wx或GTK。你想要一个WX中的GLCanvas;它似乎不存在于主包中,我猜是因为需求不足,但确实存在于wxcore中。我还不知道WX是否足够,因为它在wxcore中,但不在WX中。这是否意味着我仍然可以简单地使用它,或者它必须首先在wx中实现以支持它?尽管远离过剩的答案是正确和有用的,但字面问题的答案是use keyboardMouseCallback。mousewheel事件不起作用,但keyboardMouseCallback也能处理轮子事件,因此它在GLUT中也能起作用 ,字面问题的答案是使用键盘鼠标回调。mousewheel事件不起作用,但keyboardMouseCallback也处理轮子事件,因此它在GLUT中起作用。