版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Better Interactive Programs更好交互程序设计原著Ed AngelProfessor of Computer Science, Electrical and Computer Engineering, and Media ArtsUniversity of New Mexico编辑 武汉大学计算机学院图形学课程组Objectives and outlineLearn to build more sophisticated interactive programs using Picking选取 section 3.8 PickingSelect objects from
2、 the display从显示结果中选择对象Three methods三种方法Logic Operations逻辑运算 section 3.13Rubberbanding橡皮条Interactive drawing of lines and rectangles直线与矩形的交互绘制方法Display Lists显示列表section 3.4 Display ListsRetained mode graphics图形的记忆模式保留模式3.8 Picking选取(1)Identify a user-defined object on the display从显示结果中识别用户定义的对象In pri
3、nciple, it should be simple becauseThe mouse gives the position and We should be able to determine to which object(s) a position corresponds原则上说要达到这个目标是很简单的,因为鼠标可以提供位置信息,我们因当能够根据位置确定对应的是哪个对象3.8 Picking选取(2)Practical difficulties实际操作中的困难Pipeline architecture is feed forward, hard to go from screen ba
4、ck to world流水线式的图形体系是单向的,很难从二维屏幕返回到三维世界Complicated by screen being 2D, world is 3D二维屏幕,三维世界,也使问题变得复杂How close do we have to come to object to say we selected it?离位置多近可以认为选择了对象?3.8 Picking选取(Three Approaches三种方法-1) 第一种方法Hit list击中(hit)列表Most general approach but most difficult to implement最一般性的方法,实现也
5、最困难OpenGL supports this approach OpenGL支持本ppt主要介绍的3.8 Picking选取(Three Approaches三种方法-2)第二种方法Rectangular maps矩形映射Easy to implement for many applications容易实现See paint program in text3.8 Picking选取(Three Approaches三种方法-3)第三种方法Use back or some other buffer to store object ids as the objects are rendered当
6、绘制对象时,利用后缓冲区或者其它缓冲区存贮对象的标识第一种方法3.8.1 Picking and Selection Model(Rendering Modes显示输出模式-1)OpenGL can render in one of three modes selected by glRenderMode(mode) mode)可以设置OpenGL用下述三种模式显示内容GL_RENDER: normal rendering to the frame buffer (default)正常显示到帧缓冲区中(缺省模式)第一种方法3.8.1 Picking and Selection Model(Re
7、ndering Modes显示输出模式-2)GL_FEEDBACK: provides list of primitives rendered but no output to the frame buffer提供要显示的几何列表,但并不输出到帧缓冲区中GL_SELECTION: Each primitive in the view volume generates a hit record that is placed in a name stack which can be examined later在视景体中的每个几何体创建一个击中记录,这个记录放到名称堆栈中,稍后要被检测第一种方法3
8、.8.1 Picking and Selection Model(Selection Mode Functions选择模式中用到的函数)glSelectBuffer(): specifies name buffer指定名称缓冲区glInitNames(): initializes name buffer初始化名称缓冲区glPushName(id): push id on name buffer把id放到名称缓冲区中glPopName(): pop top of name buffer把名称缓冲区顶部的名称弹出glLoadName(id): replace top name on buffer取
9、代在名称缓冲区顶部的名称id is set by application program to identify objectsid是由应用程序设置,用以识别对象第一种方法3.8.1 Picking and Selection Model (Using Selection Mode选择模式的应用)Initialize name buffer初始化名称缓冲区Enter selection mode (using mouse)进入选择模式(例如:应用鼠标)Render scene with user-defined identifiers显示输出场景,场景中对象具有用户指定的标识Reenter n
10、ormal render mode重新进入正常的显示输出模式This operation returns number of hits该操作返回击中对象个数Examine contents of name buffer (hit records)检查名称缓冲区的内容(击中记录)Hit records include id and depth information击中记录包含id与深度信息第一种方法3.8.1 Picking and Selection Model (Selection Mode and Picking选择模式与选取)As we just described it, selec
11、tion mode wont work for picking because every primitive in the view volume will generate a hit在选择模式中不能进行选取,因为这时在视景体中的每个对象都会生成一个击中记录/如何理解,见程序例子,调大gluPickMatrix参数Change the viewing parameters so that only those primitives near the cursor are in the altered view volume改变视图参数,使得只有靠近鼠标指针的对象位于新的视景体中Use gl
12、uPickMatrix (see text for details)第二种方法Using Regions of the Screen应用屏幕上的区域Many applications use a simple rectangular arrangement of the screen在许多应用程序中,屏幕采用简单的矩形分划Example: paint/CAD programEasier to look at mouse position and determine which area of screen it is in than using selection mode picking这时
13、,相比于应用选择模式进行选取而言,通过查看鼠标位置,确定屏幕的区域就更简单了drawing areatoolsmenus第三种方法Using another buffer and colors for picking通过另外的缓冲区和颜色进行选取-1For a small number of objects, we can assign a unique color (often in color index mode) to each object对于很少数目的对象,可以给每个对象赋以唯一的颜色(有时是在颜色索引模式中)We then render the scene to a color
14、buffer other than the front buffer so the results of the rendering are not visible然后把场景输入到不是前缓冲区的一个颜色缓冲区中,这样就不会看到显示出来的结果第三种方法Using another buffer and colors for picking通过另外的缓冲区和颜色进行选取-2We then get the mouse position and use glReadPixels() to read the color in the buffer we just wrote at the position
15、 of the mouse然后获到鼠标位置,读取缓冲区中的颜色The returned color gives the id of the object根据返回的颜色确定是哪个对象Back buffer is not displayed后缓冲区不可见3.13 Logic Operations(Writing Modes像素的写入模式-1)Writing mode写入模式Copy复制模式(or replacement替换 )Exclusive OR异或模式 (or XOR)Source pixel源像素Destination pixel目标像素3.13 Logic Operations(Writ
16、ing Modes像素的写入模式-2)frame buffer帧缓冲区applicationbitwise logical operation逐位逻辑操作3.13 Logic Operations(XOR write写入模式-1)Usual (default) mode: source replaces destination (d = s)缺省的写入模式是直接用源像素取代目标像素即d=sCannot write temporary lines this way because we cannot recover what was “under” the line in a fast simp
17、le way用这种方法不能绘制一条临时直线,因为我们不能用快速简单的方法恢复在临时直线下面的内容3.13 Logic Operations(XOR write写入模式-2)Exclusive OR mode异或模式 (XOR) (d = d s)相同值为0,不同值为1x y x =yd = (d s) sHence, if we use XOR mode to write a line, we can draw it a second time and line is erased!因此如果应用XOR模式画一条直线,那么只要在原地再画一遍这条直线就可以删除这条直线3.13 Logic Oper
18、ations (Rubberbanding橡皮条式绘图-1)Switch to XOR write mode切换到XOR写入模式Draw object绘制对象For line can use first mouse click to fix one endpoint and then use motion callback to continuously update the second endpoint利用第一次单击鼠标固定线段的一个端点,然后再利用鼠标移动的回调函数连续更新第二个端点3.13 Logic Operations (Rubberbanding橡皮条式绘图-2)Each tim
19、e mouse is moved, redraw line which erases it and then draw line from fixed first position to new second position每次鼠标移动的时候,重绘一遍原来的直线从而删除它,然后再从固定的第一个端点到新的第二个端点之间再画一条直线At end, switch back to normal drawing mode and draw line最后切换回到正常的绘图模式并绘制直线Works for other objects: rectangles, circles也适用于其它对象:矩形、圆223
20、.13 Logic Operations (Rubberband Lines橡皮条型直线)initial display初始显示结果draw line with mouse in XOR mode用XOR模式画一条直线mouse moved to new position移到新的位置first point第一个点second point第二个点original line redrawn with XOR利用XOR重画原来的直线new line drawn with XOR新的直线利用XOR画出来3.13 Logic Operations (XOR in OpenGL中的逻辑操作)There a
21、re 16 possible logical operations between two bits在两位之间有16种可能的逻辑操作All are supported by OpenGL支持所有的这16种操作Must first enable logical operations必须首先启动逻辑操作glEnable(GL_COLOR_LOGIC_OP)Choose logical operation然后选择逻辑操作类型glLogicOp(GL_XOR)glLogicOp(GL_COPY) (default默认值)3.4 Display Lists显示列表(Immediate and Retai
22、ned Modes快速(立即)模式与记忆(保留)模式-1)Recall that in a standard OpenGL program, once an object is rendered there is no memory of it and to redisplay it, we must re-execute the code for it在标准的OpenGL程序中,一旦某个对象被显示输出,对它没有任何记忆;为了重新显示它,需要再执行一次相应的代码Known as immediate mode graphics这就是快速(立即)模式(immediate mode)的图形Can b
23、e especially slow if the objects are complex and must be sent over a network如果对象相当复杂,而且通过网络传输,那么这就可能导致系统非常慢3.4 Display Lists显示列表(Immediate and Retained Modes快速(立即)模式与记忆(保留)模式-2)Alternative is define objects and keep them in some form that can be redisplayed easily另外一种模式就是首先定义对象,然后以某种形式把它记忆下来,从而更容易重新
24、显示Retained mode graphics这就是记忆模式(retained mode)的图形 plished in OpenGL via display lists在OpenGL中是通过显示列表实现的3.4 Display Lists显示列表Conceptually similar to a graphics file概念上类似于图形文件Must define (name, create)必须首先定义列表的名称并创建它Add contents向列表中添加内容Close关闭列表In client-server environment, display list is placed on s
25、erver在客户-服务的体系环境中,显示列表是放在服务器(显示服务器)一方Can be redisplayed without sending primitives over network each time这样不必通过网络每次发送原来的几何定义就可以重新显示3.4 Display Lists显示列表(Display List Functions显示列表中用到的函数)Creating a display list创建显示列表GLuint id;void init() id = glGenLists( 1 ); glNewList( id, PILE ); /*other OpenGL routines绘图子程序或者命令*/ glEndList();Call a created list调用已创建的显示列表v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度建筑工程人工费承包合同(含信息化管理)3篇
- 二零二五年度新材料研发与应用股权合作开发合同3篇
- 单位制度集粹汇编【人员管理篇】十篇
- 二零二五年度劳动合同法与员工职业发展路径规划合同3篇
- 单位制度分享汇编【人力资源管理】十篇
- 办公楼改造隔层施工合同
- 渔业挖机租赁合同协议
- 山东省林业工程合同样本
- 停车场设施施工合同范本
- 建筑电气改造合同模板
- 2024年危险化学品生产经营单位其他从业人员考试题库附答案
- 信号分析与处理课程设计课程教学大纲基本要求及规范(集中实践环节)
- 2024年中考物理真题及分类汇编-考点25:磁现象-电生磁
- 2024年更新版:精准农业无人机植保服务合同
- 2024年度中国医院人力资源现状调研报告
- 中华传统文化之文学瑰宝学习通超星期末考试答案章节答案2024年
- 2023年外交学院招聘笔试备考试题及答案解析
- 思想品德鉴定表(学生模板)
- 满堂支架计算
- MA5680T开局配置
- (完整word版)澳大利亚签证54表(家庭构成)
评论
0/150
提交评论