chap3用户接口与交互技术.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文档。上传文档
查看更多
chap3用户接口与交互技术

OpenGL的三种模式 渲染(绘制)模式:GL_RENDER(默认) 检选模式:GL_SELECT 反馈模式:GL_FEEDBACK 在检选模式、反馈模式这两种模式下,OpenGL的绘图命令不会送到framebuffer中,即不会在屏幕上绘制任何东西。 在使用选择模式时,应该首先把场景绘制到帧缓存,然后再进入选择模式。 拾取就是在选择模式下,在视区内根据光标位置生成一个小区域(视景体),并在该视景体绘制场景中的所有图元,从而确定哪些图元会出现视景体内,并将这些对象的标识符保存在选择数组中。 一旦进入选择模式,帧缓存中的内容就不会再改变,直到退出选择模式。 当退出选择模式,OpenGL返回一个选择数组,存有图元与拾取区域相交的选择命中记录,每个记录对应名称堆栈中的当前内容。 当用绘制命令绘制图元时,可以通过把图元的名称装载到名称堆栈中,这样,当返回命中记录时,可以使用名称堆栈中的内容,确定用户选择的是屏幕上的哪个图元。 检选模式下实现拾取(Pick)的步骤 使用glSelectBuffer()定义图元列表缓冲区,保存拾取返回的信息; 使用glRenderMode(GL_SELECT)进入检选模式; 使用gluPickMatrix()定义拾取区域; 使用glInitNames() 初始化名称堆栈(Name Stack); 使用glPushName()保存名称; 使用glPushMatrix()和glPopMatrix()保存场景坐标; 绘制图形,使用glLoadName() 为每个待选图形命名并保存相应物体; 使用glRenderMode(GL_RENDER)退出检选模式,返回渲染模式,并且返回拾取信息。 拾取(Pick)的主要函数 void glSelectBuffer(GLsize size,GLuint *buffer);定义选择数组 GLint glRenderMode(GLenum mode);选择模式 mode: GL_RENDER(默认)、GL_SELECT和GL_FEEDBACK; 返回值:当退出选择或反馈模式时,返回选择或反馈数组中的值的个数,负值表示溢出。 void glInitNames(void);初始化名称堆栈 void glPushName(GLuint name); 将name压入名称堆栈 拾取(Pick)的主要函数 void gluPickMatrix(GLdouble x, GLdouble y,GLdouble width, GLdouble height,Glint viewport[4]);定义拾取区域 x,y:拾取区域的中心(通常为光标位置); width,height:拾取区域的宽、高; viewport[4]:当前视区的边界,可以通过以下函数获得。 glGetIntegerv(GL_VIEWPORT, Glint *viewport); void glLoadName(GLuint name);用name替换栈顶元素 * 基本交互绘图技术 旋转 设置旋转中心,绕旋转中心随光标移动而旋转。 图3.16 旋转技术 * 基本交互绘图技术 形变 图3.17 形变技术 * 三维交互技术 三维图形数据的输入 三维定位 三维定向 * 3.4 OpenGL实现橡皮筋技术 橡皮筋技术的实现方法 基于异或操作的橡皮筋技术 利用颜色的异或操作,对原有图形并不是擦除,而是再绘制一条同样的直线段并与原图形进行异或操作,此时原图形会从屏幕上消失; 基于缓冲区的橡皮筋技术 利用双缓存技术,绘制图形时分别绘制到两个缓存,交替显示。 * OpenGL实现橡皮筋技术 鼠标实现 鼠标响应函数 glutMouseFunc 鼠标移动相应函数 glutMotionFunc glutPassiveMotionFunc * OpenGL实现橡皮筋技术 键盘实现 键盘相应函数 glutKeyboardFunc 3.5 OpenGL实现拾取操作 OpenGL实现拾取操作 * OpenGL实现拾取操作 设置拾取缓冲区 void glSelectBuffer(GLsizei n, GLunint *buff); 进入选择模式 GLint glRenderMode(GLenum mode); * OpenGL实现拾取操作 名字堆栈操作 初始化名字堆栈(glInitNames) 将一个名字压入堆栈(glPushName) 替换名字堆栈的栈顶元素(glLoadName) 将栈顶元素弹出(glPopName) * OpenGL实现拾取操作 设置合适的变换过程 gluPickMatri

文档评论(0)

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

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

1亿VIP精品文档

相关文档