OpenGL 鼠标、键盘交互响应事件
先来一个样例:
uses
gl,glu,glut;
procedure InitEnvironment;cdecl;
begin
glClearColor(0.6,0.6,0.6,);//设置清屏颜色灰色
glClear(GL_COLOR_BUFFER_BIT);
glPointSize();/设置点的大小
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluOrtho2D(,,,);
end;
procedure mydisplay;cdecl;
begin
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
end;
procedure OnMouse(button,state,x,y:longint);cdecl;
begin
if (button=GLUT_LEFT_BUTTON)and(state=GLUT_DOWN)then//如果鼠标左键按下
begin
glColor3f(,,);//红色
glBegin(GL_POINTS);
glVertex2f(x,-y);//画点
glEnd();
glFlush();
end;
if (button=GLUT_MIDDLE_BUTTON)and(state=GLUT_DOWN)then//如果鼠标滚轮按下
begin
glColor3f(,,);//原谅色
glBegin(GL_POINTS);
glVertex2f(x,-y);//画点
glEnd();
glFlush();
end;
if (button=GLUT_RIGHT_BUTTON)and(state=GLUT_DOWN)then//如果鼠标右键按下
begin
glColor3f(,,);//蓝色
glBegin(GL_POINTS);
glVertex2f(x,-y);//画点
glEnd();
glFlush();
end;
end;
begin
glutInit(@argc,argv);
glutInitDisplayMode(GLUT_RGB or GLUT_SINGLE);
glutInitWindowPosition(,);
glutInitWindowSize(,);//设置窗口大小
glutCreateWindow('OpenGL');//建立窗口
InitEnvironment();
glutMouseFunc(@OnMouse);//鼠标键盘事件注册
glutDisplayFunc(@myDisplay);//调用主过程
glutMainLoop();
end.
从上面可以看到到,处理鼠标OnMouse事件的函数,一定有4个参数。第一个参数表明哪个鼠标键被按下或松开,这个变量可以是下面的三个值中的一个:
GLUT_LEFT_BUTTON
GLUT_MIDDLE_BUTTON
GLUT_RIGHT_BUTTON
第二个参数表明,函数被调用发生时,鼠标的状态,也就是是被按下,或松开,可能取值如下:
GLUT_DOWN
GLUT_UP
当函数被调用时,state的值是GLUT_DOWN,那么程序可能会假定将会有个GLUT_UP事件,甚至鼠标移动到窗口外面,也如此。然而,如果程序调用glutMouseFunc传递NULL作为参数,那么GLUT将不会改变鼠标的状态。
 
剩下的两个参数(x,y)提供了鼠标当前的窗口坐标(以左上角为原点)。
 
检测动作(motion
GLUT提供鼠标motion检测能力。有两种GLUT处理的motion:active motion和passive motion。Active motion是指鼠标移动并且有一个鼠标键被按下。Passive motion是指当鼠标移动时,并有没鼠标键按下。如果一个程序正在追踪鼠标,那么鼠标移动期间,没一帧将产生一个结果。
 
和以前一样,你必须注册将处理鼠标事件的函数(定义函数)。GLUT让我们可以指定两个不同的函数,一个追踪passive motion,另一个追踪active motion
 
它们的函数原型,如下:
procedure glutMotionFunc(void(*func)(x,y:longint));
procedure glutPassiveMotionFunc(void (*func)(x,y:longint));
参数:
Func:处理各自类型motion的函数名。
处理motion的参数函数的参数(x,y)是鼠标在窗口的坐标。以左上角为原点。
 
检测鼠标进入或离开窗口
GLUT还能检测鼠标鼠标离开,进入窗口区域。一个回调函数可以被定义去处理这两个事件。GLUT里,调用这个函数的是glutEntryFunc,函数原型如下:
procedure glutEntryFunc(void(*func)(int state));
参数:
Func:处理这些事件的函数名。
上面函数的参数中,state有两个值:
GLUT_LEFT
GLUT_ENTERED
表明,是离开,还是进入窗口。

OpenGL 鼠标交互响应事件的更多相关文章

  1. OpenGL键盘交互响应事件

    GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP).在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入.   处理 ...

  2. OpenGL(十六) 鼠标、键盘交互响应事件

    OpenGL中通过鼠标和键盘跟程序交互的实现需要实现注册鼠标和键盘响应事件,在一定条件下,该事件被触发,事件里的程序被执行,达到交互的目的. 通过glutMouseFunc(&OnMouse) ...

  3. 3D Slicer Modify Mouse Event 修改3D Slicer中的鼠标响应事件

    在3D Slicer中,我们如果想在自己写的插件中来修改默认的鼠标响应事件的话,就需要先将原有的响应事件链接删除,然后建立自定义的响应事件链接,然后将自己要实现的功能写在响应事件函数中. 比如Slic ...

  4. 从零开始openGL——三、模型加载及鼠标交互实现

    前言 在上篇文章中,介绍了基本图形的绘制.这篇博客中将介绍模型的加载.绘制以及鼠标交互的实现. 模型加载 模型存储 要实现模型的读取.绘制,我们首先需要知道模型是如何存储在文件中的. 通常模型是由网格 ...

  5. CSS鼠标响应事件经过、移动、点击示例介绍

    本文为大家介绍下CSS 鼠标响应事件:鼠标经过CSS.鼠标移动CSS.鼠标点击CSS以及示例,喜欢的朋友可以参考下   几种鼠标触发CSS事件. 说明: onMouseDown 按下鼠标时触发 onM ...

  6. cocos2d JS 鼠标响应事件

    对于PC和超级本,添加鼠标事件的的处理,可以加强用户的体验,其处理逻辑与触摸事件基本一样,多了一些鼠标特有的事件响应 如滚轮事件(onMouseScroll) cc.eventManager.addL ...

  7. mfc 鼠标、键盘响应事件

    一.基本目标 1.有一个基本的MFC程序,点击“关闭”则“关闭”这个程序,这点没什么好讲的,把自带的“取消”按钮,右键->属性的Caption改成“关闭”二字就可以了 2.鼠标在对话框中移动,则 ...

  8. 3D场景中的鼠标响应事件

    原文:3D场景中的鼠标响应事件 今天要讲的是3D场景中的鼠标响应事件的处理,首先Button的响应是大家熟知的,只要加上一个click事件,然后写一个响应的处理时间就行了.对于二维平面上的一些控件也很 ...

  9. OSX 鼠标和键盘事件

    本文转自:http://www.macdev.io/ebook/event.html 事件分发过程 OSX 与用户交互的主要外设是鼠标,键盘.鼠标键盘的活动会产生底层系统事件.这个事件首先传递到IOK ...

随机推荐

  1. NX二次开发-设置WCS位置UF_CSYS_set_wcs

    NX9+VS2012 UF_initialize(); //输入X向量Y向量输出一个3*3矩阵 ] = {0.0, 0.0, 1.0}; ] = {0.0, 1.0, 0.0}; ]; UF_MTX3 ...

  2. 使用Socket.IO做单页SPA应用更新

    单页应用的挑战之一是确保客户端软件和服务器应用相匹配. 举例:如果一个用Bobbie在他的浏览器中加载我们的单页应用,五分钟之后我们更新了服务器应用.现在Bobbiede遇到了问题,因为我们对服务器做 ...

  3. go modules学习

    https://github.com/golang/go/wiki/Modules https://tonybai.com/2018/07/15/hello-go-module/ https://ww ...

  4. Java-Class-I:java.util.Map

    ylbtech-Java-Class-I:java.util.Map 1.返回顶部 1.1. import java.util.HashMap; import java.util.Map; 1.2. ...

  5. Spring随笔-bean装配-自动装配

    Spring提供了三种装配方式 1.XML文件进行显式装配 2.java中进行显示装配 3.自动化装配 1.自动化装配的两种实现方式 1.组件扫描:Spring会自动发现应用上下文中创建的bean 2 ...

  6. 『BASH』——Learn BashScript from Daniel Robbins——[003]

    ABSTRACT: Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM develop ...

  7. jquery实现视频滚动

    原理图 <!DOCTYPE html> <html lang="en"> <head> <script src="jquery. ...

  8. 2008年最佳Web设计/前端开发技巧、脚本及资源总结

    工具&Web应用 13个可能会让你说”Thank You”的必不可少的开源应用 14个免费工具让你了解为什么人们会放弃访问你的网站 40+CSS生成器 74个我们可能已经忘记的适合网页设计师的 ...

  9. python日常使用

    os.path.splitext('C:\py\wxPython.gif')  得到扩展名的函数 os.remove(删除文件) os.listdir(显示该目录下的文件) os.getcwd(获取当 ...

  10. The linux command 之网络

    一.检查和检测网络 ping命令——向网络主机发送特殊数据包 [me@linuxbox ~]$ ping www.baidu.com 按Ctrl+C终止程序 tracepath——跟踪网络数据包的传输 ...