3.3_交互设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.3_交互设计

* * * * * * * * * * * * * * * * * * * * * * * 计算机图形学 唐慧 影像科学与技术实验室 东南大学计算机学院 corinna@seu.edu.cn 3.3 交互程序设计 * 基本内容 学会设计更复杂的交互程序,采用的方法为 选择和拾取 从显示结果中选择对象 三种方法 显示列表 图形的记忆模式 * 拾取(Picking) 从显示结果中识别用户定义的对象 原则上说要达到这个目标是很简单的,因为鼠标可以提供位置信息,我们因当能够根据位置确定对应的是哪个对象 实际操作中的困难 离位置多近可以认为选择了对象? 流水线式的图形体系是单向的,很难从二维屏幕返回到三维世界 * 三种方法 矩形映射 容易实现 当绘制对象时,利用后缓冲区或者其它缓冲区存贮对象的标识 击中(hit)列表 最一般性的方法,实现也最困难 * 很多应用程序利用简单的矩形区域将窗口分割 例如画图/CAD 系统 通过判断鼠标位置即可容易的得知选择对象 利用屏幕区域 绘画区域 工具栏 菜单 * 通过另外的缓冲区和颜色 进行选取 对于很少数目的对象,可以给每个对象赋以唯一的颜色(有时是在颜色索引模式中) 然后把场景输入颜色缓冲区中,这样就不会看到显示出来的结果 然后获到鼠标位置,利用glReadPixels()读取缓冲区中的颜色 根据返回的颜色确定是哪个对象 再用正常颜色绘制显示 * 显示输出模式 利用glRenderMode(mode)可以设置OpenGL用下述三种模式显示内容 GL_RENDER: 正常显示到帧缓冲区中(缺省模式) GL_FEEDBACK: 提供要显示的几何列表,但并不输出到帧缓冲区中 GL_SELECTION:在视景体中的每个几何体创建一个击中记录,这个记录放到名称堆栈中,稍后要被检测 * 选择模式中用到的函数 glSelectBuffer(): 指定名称缓冲区 glInitNames(): 初始化名称缓冲区 glPushName(id): 把id放到名称缓冲区中 glPopName(): 将名称缓冲区顶部的名称弹出 glLoadName(id): 取代在名称缓冲区顶部的名称 id 是由应用程序设置,用以识别对象 * 选择模式的应用 初始化名称缓冲区 进入选择模式(例如:应用鼠标) 显示输出场景,场景中对象具有用户指定的标识 重新进入正常的显示输出模式 该操作返回击中对象个数 检查名称缓冲区的内容(击中记录) 击中记录包含id与深度信息 * 拾取 对选择的一种扩展 改变视图参数,使得只有靠近鼠标指针的对象位于新的视景体中 利用 gluPickMatrix (…) 参考:《OpenGL编程指南(第四版)》 第13章 选择和反馈 应用选择机制的建议 二维绘图程序 自己编写拾取算法比OpenGL拾取机制更容易 三维程序应用OpenGL拾取机制 组织数据结构 设置物体选中标记位 * 像素的写入模式 帧缓冲区 应用程序 ‘ 逐位逻辑操作 * XOR 写入模式 缺省的写入模式是直接用源像素取代目标像素,即 d’=s 不能绘制一条临时直线 异或操作(XOR):d’ = d ? s x ? y ? y =x 重画一遍就可以实现删除操作 * 橡皮筋式绘图 切换到XOR写入模式 绘制对象 固定线段的一个端点,然后再利用移动回调函数,连续更新第二个端点 移动时,重画原来的直线从而删除它 从固定端点到新端点之间画一条直线 最后,切换回到正常的绘图模式并绘制直线 也适用于其它对象:矩形、圆 * 橡皮筋型直线 初始显示 利用鼠标在XOR模式 中画一条直线 把鼠标移到 新的位置 第一个点 第二个点 原来的直线利用XOR 重新画一遍 新的直线利用 XOR画出来 * XOR in OpenGL 在两位之间有16种可能的逻辑操作 OpenGL支持所有的这16种操作 必须首先启动逻辑操作 glEnable(GL_COLOR_LOGIC_OP) 然后选择逻辑操作类型 glLogicOp(GL_XOR) glLogicOp(GL_COPY) (default) * 快速模式与记忆模式 注意:在标准的OpenGL程序中,一旦某个对象被显示输出,对它没有任何记忆;为了重新显示它,需要再执行一次相应的代码 这就是快速模式(immediate mode)的图形 如果对象相当复杂,而且通过网络传输,那么这就可能导致系统非常慢 另外一种模式就是首先定义对象,然后以某种形式把它记忆下来,从而更容易重新显示 这就是记忆模式(retained mode)的图形 在OpenGL中是通过显示列表实现的 * 显示列表 从概念上类似于图形文件 必须首先定义列表的名称并创建它 向列表中添加内容 关闭列表 在客户-

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档