Lighthouse3d.com >> GLUT Tutorial >> Input >> The Mouse

上一节我们讨论了怎么用GLUT的键盘函数跟OpenGL应用程序进行交互.现在来探讨鼠标的.GLUT的鼠标接口提供了一堆可选的事件来添加鼠标交互,来监测鼠标点击和鼠标移动.

监测鼠标点击事件

和键盘事件一样,GLUT提供了响应鼠标点击事件的注册回调函数.函数名是glutMouseFunc,也是在程序的初始化语句中被调用.原型如下:

void glutMouseFunc(void (*func)(int button, int state, int x, int y));

func - 鼠标点击事件的触发函数名

在glutMouseFunc函数的原型中可以看到4个参数.

第一个参数表示按下或释放了哪个键,该参数有3个常量值选项:

GLUT_LEFT_BUTTON

GLUT_MIDDLE_BUTTON

GLUT_RIGHT_BUTTON

第二个参数表示事件触发时按键的状态,例如是按下还是释放.可选值是:

GLUT_DOWN

GLUT_UP

当一个事件回调被带着GLUT_DOWN状态触发的时候,应用程序会自动断定GLUT_UP的状态会在鼠标移离窗体的时候自动触发.

剩下的两个参数是提供了相对于窗体客户区域左上角的x,y坐标.

监测鼠标移动

GLUT为应用程序提供鼠标移动监测的能力.有两类移动GLUT可以监测:活跃移动和静默移动.活跃移动是鼠标移动且鼠标键按下时触发.静默移动是鼠标移动且鼠标键没按下时触发.如果应用程序正在跟踪活动,在鼠标移动的期间每帧都会生成事件.

和之前一样,你要注册GLUT回调函数来响应控制移动事件.GLUT允许我们指定两个不同的函数: 以个跟踪静默移动,一个跟踪活跃移动.原型如下:

void glutMotionFunc(void (*func) (int x,int y));

void glutPassiveMotionFunc(void (*func) (int x, int y));

func - 响应各自类型的移动的处理函数.

处理函数的参数是相对于窗体客户区域左上角的x,y坐标.

检测鼠标进入和离开窗体

GLUT可以检测鼠标离开或进入窗体区域的动作.一个回调函数可以用于控制这两个事件.原型如下:

void glutEntryFunc(void (*func)(int state));

func - 处理函数

该处理函数的参数是表示鼠标已进入/已离开窗体区域.GLUT定义两个常量值以用于描述状态:

GLUT_LEFT

GLUT_ENTERED

注意: 在微软的窗体中,该函数不太精确,因为在微软系统中,焦点转移是要通过鼠标点击.虽然你可以通过微软提供的工具更改该特性,但是有的人可能认为这是标准设置,不在微软窗体中使用该特性来监测鼠标进入/离开窗体会是更好的选择.

[译]GLUT教程 - 鼠标的更多相关文章

  1. [译]GLUT教程(目录)

    http://www.lighthouse3d.com/tutorials/glut-tutorial/ GLUT是OpenGL Utility Toolkit的意思.作者Mark J. Kilgar ...

  2. [译]GLUT教程 - glutPostRedisplay函数

    Lighthouse3d.com >> GLUT Tutorial >> Avoiding the Idle Func >> glutPostRedisplay 直 ...

  3. [译]GLUT教程 - 创建和关闭子窗体

    Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Creating and Destroying Subwind ...

  4. [译]GLUT教程 - 游戏模式

    Lighthouse3d.com >> GLUT Tutorial >> Extras >> Game Mode 根据GLUT官网的说明,GLUT的游戏模式是为开启 ...

  5. [译]GLUT教程 - 整合代码4

    Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> The Code So Far IV 以下代码使用了位图字 ...

  6. [译]GLUT教程 - 整合代码3

    Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> The Code So Far III 这里我们准备包含一 ...

  7. [译]GLUT教程 - 子菜单

    Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Sub Menus 上一节我们介绍了如何创建普通菜单和如果 ...

  8. [译]GLUT教程 - 弹出菜单基础

    Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Popup Menus 弹出菜单也是GLUT的一部分.虽然 ...

  9. [译]GLUT教程 - 移动镜头3

    Lighthouse3d.com >> GLUT Tutorial >> Input >> Moving the Camera III 上一节的示例中我们用键盘更改 ...

随机推荐

  1. spark-groupByKey

    一般来说,在执行shuffle类的算子的时候,比如groupByKey.reduceByKey.join等. 其实算子内部都会隐式地创建几个RDD出来.那些隐式创建的RDD,主要是作为这个操作的一些中 ...

  2. Array方法介绍

    Array 是抽象基类,抽象基类不能创建它的对象 定义的数组: int[,] myArr4=new int[2,3]{{1,2,3},{4,5,6}}; int[, ,] myArr3 = new i ...

  3. 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-切入点(pointcut)API

    本文翻译自Spring.NET官方文档Version 1.3.2. 受限于个人知识水平,有些地方翻译可能不准确,但是我还是希望我的这些微薄的努力能为他人提供帮助. 侵删. 让我们看看 Spring.N ...

  4. 初识交替最小二乘ALS

    ALS是alternating least squares的缩写 , 意为交替最小二乘法:而ALS-WR是alternating-least-squares with weighted-λ -regu ...

  5. LinuxPAServer19.0.tar.gz压缩包

    LinuxPAServer19.0.tar.gz DELPHI XE10.2(TOKYO)开始可以编写LINUX控制台程序.在LINUX上面需要部署LinuxPAServer19.0.tar.gz,即 ...

  6. ASIHTTPRequest框架使用总结系列之阿堂教程3(异步请求)

    在上一节中,阿堂和网友们分享了ASIHTTPRequest框架对于get,post的同步请求方式.很显然,如果网速比较慢,查询的时候会一直很黑屏,直到请求结束界面才出现结果,这样用户体验肯定很不好了. ...

  7. [置顶] kubernetes资源类型--PetSets/StatefulSet

    PetSet首次在K8S1.4版本中,在1.5更名为StatefulSet.除了改了名字之外,这一API对象并没有太大变化. 注意:以下内容的验证环境为CentOS7.K8S版本1.5.2,并部署Sk ...

  8. 求逆序对数总结 & 归并排序

    用归并排序方式 最原始的方法的复杂度是O(n^2). 使用归并排序的方式,可以把复杂度降低到O(nlgn). 设A[1..n]是一个包含N个非负整数的数组.如果在i〈 j的情况下,有A〉A[j],则( ...

  9. BindVertexbuffer

    stride 的意思是 inputstream.layout 的大小 比如 description是 pos uv normal stride 就是一组pos uv normal的大小 ns  里面 ...

  10. ES6方面重点摘要

    1.变量声明(1)内层变量覆盖外层变量(即后面的覆盖前面的)(2)循环变量的声明,i值在全局范围内有效,所以最后输出的都是最后一轮i的值(3)let.const的引入,为JS增加了块级作用域的概念(c ...