我想在我的OpenGL GLUT程序中使用鼠标滚轮来放大和缩小场景?我怎么做?在GLUT中使用鼠标滚轮
28
A
回答
19
请注意,古老的Nate Robin's GLUT库不支持滚轮。但是,稍后GLUT的实现像FreeGLUT那样。
在FreeGLUT中使用滚轮非常简单。方法如下:
声明一个回调函数,当滚动滚轮时应该调用该函数。这是原型:
void mouseWheel(int, int, int, int);
与(免费)转运蛋白功能glutMouseWheelFunc()注册回调。
glutMouseWheelFunc(mouseWheel);
定义回调函数。第二个参数给出了滚动的方向。 +1的值是前向的,-1是向后的。
void mouseWheel(int button, int dir, int x, int y)
{
if (dir > 0)
{
// Zoom in
}
else
{
// Zoom out
}
return;
}
就是这样!
32
Freeglut的glutMouseWheelFunc回调取决于版本,并在十用标准鼠标功能不可靠,测试按钮3和4
上glutMouseWheelFunc状态OpenGlut注释:
由于缺乏信息关于鼠标,此时不可能在X上正确地实现此操作。使用此功能 限制了您的应用程序的可移植性。 (此功能在 X上工作,只是不可靠。)鼓励您使用标准的可靠鼠标按钮报告,而不是轮式事件。
使用标准GLUT鼠标报告:
#include <GL/glut.h>
<snip...>
void mouse(int button, int state, int x, int y)
{
// Wheel reports as button 3(scroll up) and button 4(scroll down)
if ((button == 3) || (button == 4)) // It's a wheel event
{
// Each wheel event reports like a button click, GLUT_DOWN then GLUT_UP
if (state == GLUT_UP) return; // Disregard redundant GLUT_UP events
printf("Scroll %s At %d %d\n", (button == 3) ? "Up" : "Down", x, y);
}else{ // normal button event
printf("Button %s At %d %d\n", (state == GLUT_DOWN) ? "Down" : "Up", x, y);
}
}
<snip...>
glutMouseFunc(mouse);
如前所述的OP,它是 “死简单”。他错了。
相关问题
- 1. 在铯中禁用鼠标滚轮
- 2. 如何使用鼠标滚轮在WPF中水平滚动?
- 3. GMMap使用鼠标滚轮缩放。
- 4. 如何使用鼠标滚轮
- 5. 放大CTRL +鼠标滚轮在DotNetBrowser中
- 6. as3鼠标滚轮反转
- 7. ContextMenuStrip和鼠标滚轮
- 8. 鼠标滚轮事件
- 9. python诅咒鼠标滚轮
- 10. jscrollpane水平鼠标滚轮
- 11. 鼠标滚轮速度
- 12. 使用Qt模仿/伪造鼠标点击鼠标滚轮
- 13. 滚动面板鼠标滚轮滚动
- 14. 轮事件brokes鼠标滚轮的JavaScript
- 15. 在拖动时使用鼠标滚轮滚动dnd
- 16. 如何滚动到使用鼠标滚轮标记
- 17. 当鼠标光标在div内时,使用jquery禁用鼠标滚轮功能?
- 18. 如何使DBLookupComboBox鼠标滚轮工作
- 19. 使用Tilelayout在Spark列表中滚动的间隔使用鼠标滚轮滚动后使用鼠标滚轮过大时
- 20. 用鼠标滚轮在div中水平滚动
- 21. 如何禁用JScrollPane标题中鼠标滚轮的滚动?
- 22. 在Java中使用带有JSpinner的鼠标滚轮
- 23. 防止在Firefox中使用Flash处理鼠标滚轮事件
- 24. 鼠标滚轮不能在IE8中使用jScrollPane(无iframe!)
- 25. 使用鼠标滚轮滚动不会触发jQuery悬停或鼠标悬停
- 26. 水平滚动面板通过鼠标拖动或使用鼠标滚轮
- 27. jquery垂直滚动鼠标滚轮
- 28. 快速平滑滚动鼠标滚轮
- 29. TListView和鼠标滚轮滚动
- 30. jquery水平滚动鼠标滚轮
对我来说很烦,freeGLUT似乎没有实现glutMouseWheelFunc()回调。相当具有讽刺意味的是,海报抱怨这种发帖方式,但你为自己发布的答案是不正确的。 – Rich 2009-01-12 20:57:05
除此之外 - 即使使用`#include`来编译代码,glutMouseWheelFunc似乎也不会被调用(就像在Ubuntu 10.04 x86_64上发布的,它发布了freeglut 2.6.0)。 解决方法是使用常规的`glutMouseFunc`回调并检查`按钮== 3`是否在轮子上,`按钮== 4'是否轮子不亮。 –
2010-07-14 21:13:09