- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
窗口大小调整回调函数.ppt
第2章图形学编程 邹昆 cszoukun@ 输入与交互 输入和交互 交互式计算机图形学应用: 计算机辅助设计(CAD) 通过图形界面控制的系统 虚拟现实系统 计算机游戏 主要内容 基于GLUT的交互式图形程序设计 动画与双缓冲 输入模式 输入设备包含一个触发装置(trigger),可以用来发信号给操作系统 比如鼠标按键 按下或释放键盘上的按键 当触发后, 输入设备返回信息 (测量值)给系统 鼠标返回位置信息 键盘返回ASCII码 请求模式(Request Mode) 仅当用户触发设备时才提供输入给程序 一个典型是键盘输入 可以删除 (退格键), 编辑, 纠正,直到回车键 (触发器) 被按下 事件模式(Event Mode) 大多系统有不只一个输入设备,每个输入设备都有可能在任一时间被用户触发 每个触发器产生一个事件(event)其测量值被放到一个事件队列(event queue)中,该队列可以被用户程序访问。 事件类型 窗口: 调整大小, (被遮挡部分)显露 鼠标: 点击一个或多个按键 移动: 移动鼠标(按下移动、被动移动) 键盘: 按下或释放一个键(普通键/特殊键) 空闲(Idle): 没有任何事件 定义当队列中没有任何事件时应该做什么 回调函数(Callbacks) 事件驱动输入的编程接口 对于图形系统能够检测到的每种事件定义一个回调函数(callback function) 当事件发生时,用户指定的函数会被执行 比如GLUT中指定鼠标回调函数: glutMouseFunc(mymouse) GLUT 回调函数 GLUT能够检测到的事件是任一窗口操作系统(Windows, X, Macintosh)中事件的一个子集 glutDisplayFunc glutMouseFunc glutReshapeFunc glutKeyboardFunc glutSpecialFunc glutIdleFunc glutMotionFunc, glutPassiveMotionFunc GLUT事件循环 回顾: GLUT程序中main函数的最后一定是glutMainLoop(); 该函数让程序进入一个无限的事件循环 在每次事件循环中, GLUT 查看事件队列 对于队列中的每个事件, GLUT 执行相应的回调函数(如果定义了的话) 如果对于该事件没有定义回调函数,则该事件被忽略或是调用默认的回调函数 使用全局变量 GLUT 回调函数的原型是固定的 void mydisplay() void mymouse(int button, int state, int x, int y) 必须通过全局变量传递信息给回调函数 基于GLUT的交互式图形程序设计 使用GLUT回调函数创建交互式图形程序 显示回调函数 鼠标回调函数 键盘回调函数 窗口调整回调函数 空闲回调函数 介绍 GLUT中的菜单 显示回调函数 当GLUT判断窗口需要被刷新时,显示回调函数被执行,比如 当窗口第一次被打开时 当窗口形状或大小发生变化时 当窗口最小化然后最大化时 当用户程序决定刷新显示时 在main函数中 glutDisplayFunc(mydisplay) 指定mydisplay为显示回调函数 每个GLUT 程序都必须有一个显示回调函数 请求重新显示 很多事件都会导致调用显示回调函数 这使得在一次事件循环中可能多次执行了显示回调函数 要避免此问题,可以通过调用 glutPostRedisplay(); 设置一个标志. 在每次事件循环结束之前,GLUT 检查该标志是否为真 如果为真则显示回调函数被调用 鼠标回调函数 glutMouseFunc(mymouse) void mymouse(int button, int state, int x, int y) 事件返回 哪个按键 (GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON) 触发的该事件 事件触发后该按键的状态 (GLUT_UP, GLUT_DOWN) 鼠标在窗口中的位置 程序终止的控制 在以前的程序中, 除了叉掉窗口没有办法终止程序 我们可以通过鼠标回调函数来控制程序的终止 使用鼠标位置 在下一个例子中, 我们在鼠标左键每次单击的位置画一个小的正方形 在这个例子中我们在鼠标按下时添加一个正方形数据,然后刷新显示,利用显示回调函数进行绘制 // 显示回调函数 void display(void) { glClear(GL_COLOR_BUFFER_BIT); // 清除背景 // 绘制count个正方形 glDrawArrays(GL_TRIANGLES, 0, count * 6); glFlush(); // 立即
您可能关注的文档
最近下载
- 北师大版(2024)小学数学二年级上册《综合实践参加欢乐购物活动》教案及反思.pdf VIP
- 北京市2019年中考英语真题(含答案).docx VIP
- 《综合与实践:欢乐购物街》教案.doc VIP
- 【生物】免疫与免疫规划第1课时课件-2025-2026学年人教版八年级上册生物.pptx VIP
- 2024版深圳市义务教育人工智能课程纲要 .pdf VIP
- 绿色食品 东乡贡羊肉分割技术标准(征求意见稿).pdf
- 中国印制电路行业排行榜暨PCB百强排行榜.docx
- 北京市2019年中考英语真题(含答案).pdf VIP
- 2022年新高考政治真题试卷(山东卷).pdf VIP
- 2025年最新详版征信报告个人信用报告样板模板word格式新版可编辑.docx VIP
文档评论(0)