[译]GLUT教程 - 鼠标
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教程 - 鼠标的更多相关文章
- [译]GLUT教程(目录)
http://www.lighthouse3d.com/tutorials/glut-tutorial/ GLUT是OpenGL Utility Toolkit的意思.作者Mark J. Kilgar ...
- [译]GLUT教程 - glutPostRedisplay函数
Lighthouse3d.com >> GLUT Tutorial >> Avoiding the Idle Func >> glutPostRedisplay 直 ...
- [译]GLUT教程 - 创建和关闭子窗体
Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Creating and Destroying Subwind ...
- [译]GLUT教程 - 游戏模式
Lighthouse3d.com >> GLUT Tutorial >> Extras >> Game Mode 根据GLUT官网的说明,GLUT的游戏模式是为开启 ...
- [译]GLUT教程 - 整合代码4
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> The Code So Far IV 以下代码使用了位图字 ...
- [译]GLUT教程 - 整合代码3
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> The Code So Far III 这里我们准备包含一 ...
- [译]GLUT教程 - 子菜单
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Sub Menus 上一节我们介绍了如何创建普通菜单和如果 ...
- [译]GLUT教程 - 弹出菜单基础
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Popup Menus 弹出菜单也是GLUT的一部分.虽然 ...
- [译]GLUT教程 - 移动镜头3
Lighthouse3d.com >> GLUT Tutorial >> Input >> Moving the Camera III 上一节的示例中我们用键盘更改 ...
随机推荐
- Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法
类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...
- luogu P1774 最接近神的人_NOI导刊2010提高(02)
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
- [POI2010]Blocks
题目大意: 给你一个长度为n的数列,给你m个数k. 对于每个k,你可以进行若干次操作,每次把一个超过k的数的多余部分移到旁边一个数. 问对于每个k,进行若干次操作以后,最长的满足每个数都不小于k的区间 ...
- [Luogu1429]平面最近点对(加强版)
题目大意: 平面最近点对. 思路: 分治. 首先将所有点排序 每次把当前区间分为两半,递归求解两个区间内部的情况,然后枚举区间两边的点. #include<cmath> #include& ...
- java读取配置文件(properties)的时候,unicode码转utf-8
有时我们在读取properties结尾的配置文件的时候,如果配置文件中有中文,那么我们读取到的是unicode码的中文,需要我们在转换一下,代码如下 /** * 将配置文件中的Unicode 转 ut ...
- 2.IsoDep类
IsoDep 类概述: Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations on a Tag. Acquire ...
- Eclipse常用小知识汇总
原文:http://blog.csdn.net/jinzhencs/article/details/50462370 1.修改注释 自动出来的author
- vertex buffer 数据结构 如何读vb的memory pool
vertex attribute (declaration) vertex stream (memory pool) 这两部分 通过attribute 里面对memory的描述把两部分 vbo ...
- Android服务之bindService源代码分析
上一篇分析startService时没有画出调用ActivityManagerService之前的时序图,这里画出bindService的时序图.它们的调用流程是一致的. 先看ContextWrapp ...
- SQL Server“吃内存”的解决
现象:Web服务器中SQL Server占用内存非常高,加内存后,SQL Server又吃掉新加的内存,好像内存永远不够用一样. 分析:其实这并不一定是由于SQL Server活动过度造成的,在启动S ...