C#交互绘图技术.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文档。上传文档
查看更多
5.5 OpenGL对图形交互的支持 投影矩阵:将顶点的视坐标变换为剪裁坐标 GLdouble projection[16];//存储投影矩阵的16个值 glGetDouble(GL_ PROJECTION_MATRIX, projection) //检索模型视图矩阵 5.5 OpenGL对图形交互的支持 Windows屏幕坐标:为要变换撑三维坐标的数据来源,了解当前鼠标的位置 CPoint mouse; ::GetCursorPos(mouse); ScreenToClient(hWnd,mouse); GLfloat winX,winY,winZ; winX=(float)mouse.x; winY =(float)mouse.y; 因为Windows窗口(0,0)从左上角开始,而OpenGL从左下角开始,所以winY =(float)viewport[3]- winY; winZ:通过glReadPixel(winX,winY,1,1,GL_DEPTH_COMPONENT,GL_GLOAT,winZ)得到 5.5 OpenGL对图形交互的支持 存储三维坐标的变量 进行方向坐标变换实现三维坐标输入的完整子程序: Point3D GetOGLPos(int x,int y) { GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winX,winY,winZ; GLdouble posX,posY,posZ; glGetDoublev(GL_MODELVIEW_MATRIX,modelview); glGetDoublev(GL_PROJECTION_MATRIX,projection); glGetIntegerv(GL_VIEWPORT,viewport); winX=(float)x; winY=(float)y; glReadPixel(winX,winY,1,1,GL_DEPTH_COMPONENT,GL_GLOAT,winZ); gluUnProject(winX,winY,winZ,modelview,projection,viewport,posX,posY,posZ); return Point3D(posX,posY,posZ); } 用OpenGL缓冲区技术实现橡皮筋功能 OpenGL帧缓存由以下四种缓存组成: 颜色缓存(Color Buffer) :图形要画入的缓存 深度缓存(Depth Buffer) :每个像素的深度值 模板缓存(Stencil Buffer) :保持某些部位图形不变,对其他部位进行绘制。 累积缓存(Accumulation Buffer) :保存RGB数据 OpenGL提供了双(颜色)缓存,分别称为前(颜色)缓存和后(颜色)缓存。通过调用函数glDrawBuffer可以指定后续绘图操作将“画进”哪个缓存,利用OpenGL的双缓存机制,可以实现橡皮筋技术。 第5章 交互绘图技术 5.1 窗口系统和事件驱动模式 5.2 交互式的显示控制技术 5.3 交互式的图形生成技术 5.4 交互式的图形编辑技术 5.5 OpenGL对图形交互的支持 5.1窗口系统和事件驱动模式 Windows操作系统是一个窗口式的多任务操作系统,在Windows环境下编写应用程序,采用事件驱动机制。传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。 一个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和结束。程序直接控制事件和过程的顺序。这样的程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。它的基本模型如图所示。 DOS环境下编程模式 事件驱动程序设计模式 对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。它的基本模型如图所示。 事件驱动程序设计模式 Windows下基于消息的事件驱动编程 消息MSG结构是Windows的一种数据结构,包含消息的窗口来源、消息种类、与此消息相关的附加信息、消息发生时鼠标的位置等。接收和处理消息的是窗口,每个窗口都有一个专门负责处理消息的 “窗口函数”。 MFC中的事件驱动编程 微软基础类库(MFC:Micros

文档评论(0)

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

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档