事件类型 中国斜学我术大草 University of Science and Technology of China ·窗口:改变尺寸、重新显示、缩成图标 ·鼠标:点击一个或多个按钮,移动 ·键盘:按下或释放某个键 ·空闲:“没有事件” 一可以定义如果队列中没有其它事件就可以进行 的某种操作 19
事件类型 • 窗口:改变尺寸、重新显示、缩成图标 • 鼠标:点击一个或多个按钮,移动 • 键盘:按下或释放某个键 • 空闲:“没有事件” – 可以定义如果队列中没有其它事件就可以进行 的某种操作 19
回调 中国斜学我术大室 University of Science and Technology of China ·回调是事件驱动输入方式的编程接口 ·为图形系统可以识别的每种类型事件定义 一个回调函数 ·当相应的事件出现时,就会自动执行用户 指定的函数 ·GLUT示例 glutMouseFunc(mouse); 鼠标回调函数 20
回调 • 回调是事件驱动输入方式的编程接口 • 为图形系统可以识别的每种类型事件定义 一个回调函数 • 当相应的事件出现时,就会自动执行用户 指定的函数 • GLUT示例 glutMouseFunc(mouse); 鼠标回调函数 20
GLUT中的回调函数 中国斜学我术大草 University of Science and Technology of Chin ·GLUT识别在各种窗口系统(Windows,X, Macintosh)中都有的一组事件 -glutDisplayFunc -glutMouseFunc glutReshapeFunc glutKeyboardFunc -glutIdleFunc 八 glutMotionFunc glutPassiveMotionFunc
GLUT中的回调函数 • GLUT识别在各种窗口系统(Windows, X, Macintosh)中都有的一组事件 – glutDisplayFunc – glutMouseFunc – glutReshapeFunc – glutKeyboardFunc – glutIdleFunc – glutMotionFunc – glutPassiveMotionFunc 21
GLUT中的事件循环 中国斜学我术大草 University of Science and Technology of China ·在任何使用GLUT库的程序中,main0函数 的最后一行实质语句必须是 glutMainLoop(); 该语句使得程序进入一个无穷的事件循环 ·每经过事件循环一次,GLUT进行下述操作 一查看事件队列中的事件 一对于在队列中的每个事件,如果定义了相应的 回调函数,GLUT就执行这个回调函数 一如果对该事件没有定义回调函数,那么就忽略 该事件 22
GLUT中的事件循环 • 在任何使用GLUT库的程序中,main()函数 的最后一行实质语句必须是 glutMainLoop(); 该语句使得程序进入一个无穷的事件循环 • 每经过事件循环一次,GLUT进行下述操作 – 查看事件队列中的事件 – 对于在队列中的每个事件,如果定义了相应的 回调函数,GLUT就执行这个回调函数 – 如果对该事件没有定义回调函数,那么就忽略 该事件 22
显示回调函数 中国斜学我术大草 University of Science and Technology of China ·只要GLUT确定需要刷新窗口,那么就会执行 显示回调函数,例如 一当第一次打开窗口的时候 一当改变了窗口形状的时候 -当重新露出了窗口的时候 一当用户程序决定需要改变显示内容的时候 ·在main0函数中, -glutDisplayFunc(display)注册要执行的显示回调函 数display 一每个GLUT程序都必须有一个显示回调函数,必要 时可以设置为空函数 23
显示回调函数 • 只要GLUT确定需要刷新窗口,那么就会执行 显示回调函数,例如 – 当第一次打开窗口的时候 – 当改变了窗口形状的时候 – 当重新露出了窗口的时候 – 当用户程序决定需要改变显示内容的时候 • 在main()函数中, – glutDisplayFunc(display)注册要执行的显示回调函 数display – 每个GLUT程序都必须有一个显示回调函数,必要 时可以设置为空函数 23