opengl拾取模式使用射线相交法实现拾取,复杂度是不是很高

一种新的基于OpenGL重绘式物体拾取方法
一种新的基于OpenGL重绘式物体拾取方法
发布: | 作者:-- | 来源: -- | 查看:1140次 | 用户关注:
摘&& 要: 基于OpenGL提出了一种重绘式拾取法,详细介绍了拾取方法和具体应用。该方法是在原来的绘图过程中添加一次虚拟绘图来帮助拾取物体。
关键词: OpenGL& 拾取& 点云
  OpenGL作为一个性能优越的图形应用程序设计界面而广泛应用于科学计算可视化、CAD/CAM、仿真、虚拟现实(VR)等领域。其中物体的拾取属于OpenGL中人机实时交
摘&& 要: 基于OpenGL提出了一种重绘式拾取法,详细介绍了拾取方法和具体应用。该方法是在原来的绘图过程中添加一次虚拟绘图来帮助拾取物体。
关键词: OpenGL& 拾取& 点云
  OpenGL作为一个性能优越的图形应用程序设计界面而广泛应用于科学计算可视化、CAD/CAM、仿真、虚拟现实(VR)等领域。其中物体的拾取属于OpenGL中人机实时交互技术的一部分。它是由操作者通过输入设备输入相应信息,来选取屏幕所显示的物体。
  拾取是计算机图形处理系统中的一个重要功能。在许多情况下,不仅要绘制图形,而且允许操作者能够通过输入设备操纵屏幕上的物体。有时还需要获取物体的空间坐标或图形数值,所有这些都要以拾取作为实现的基础。在使用OpenGL工具包开发图形处理系统时,物体的拾取有多种方法,其中包括OpenGL提供的选择机制、射线拾取法(raypicking)等。作者在开发三维图形处理系统,实现大量三维点(点云)的框选功能时,发现OpenGL提供的选择机制有其自身的缺陷,而射线拾取法又会涉及到过于复杂的算法。为此研究出一种易于实现、适应性强的物体拾取方法&&重绘式拾取法。
1& 拾取方法综述
1.1 OpenGL选择机制
  OpenGL为了解决拾取问题,提供了一种基于名字堆栈和命中记录的选择机制。但是,这种机制使用限制较多,其拾取最小单位是图元,而不是空间点,且对于数据量较大的物体会因为名字堆栈的溢出而无法成功实现。另外,OpenGL的选择机制使用起来比较麻烦,需要在正常模式和选择模式之间进行切换。
1.2 射线拾取法
  射线拾取法是通过获取鼠标在屏幕上的点击点,经屏幕坐标转换得到投影点,以视点为起点,经投影点构造一条垂直指向屏幕的射线。由于所有物体都位于视锥之内,因而只需判断这条射线与场景中的哪些物体相交,经过选择即可获取所需要物体。
  将这种方法应用于点云的框选时,则需要将屏幕上的n个点击点所对应的n条射线构成一个选择体。然后,通过算法来对每个点进行处理判断,在选择体内部的点就是所要拾取的点。
这种方法的缺点是,对于复杂的选择体,判断物体是否在选择体内部的算法极其复杂。从而使整个处理过程耗时巨大,且如此复杂的算法也会给整个系统的实现带来一定难度。
1.3 对象缓冲区的拾取方法
  对象缓冲区的拾取方法需要在内存中创建对象缓冲区,且需要对内存进行大量操作,因而降低了效率。而重绘式拾取法则不需进行屏幕数据的读取和拷贝。
1.4 重绘式拾取法
  重绘式拾取法避免了前述方法的缺点。其优点:(1)没有采用OpenGL选择机制。整个拾取过程都在OpenGL的绘图模式下完成,因此不必要为每个物体命名。同时,避免了在绘图模式与选择模式之间的切换。(2)这种方法在框选时,选择框可以是方形、圆形等各种自定义形状,并且此方法容易实现,不会涉及到复杂算法。
2& 重绘式拾取法
2.1 基本思路
  重绘式拾取法是在OpenGL绘图模式下,通过2次绘图来拾取并显示物体。第1次绘图为虚拟绘图,通过在OpenGL帧缓存中绘制一些辅助图形来帮助选取物体。这些辅助图形对于系统使用者是不可见的,因此在确定所选物体之后要将辅助图形从帧缓存中清除掉才能进行第2次绘图。第2次绘图为实际绘图,所绘图形为系统使用者看到的真实图形。
  这种拾取方法的过程如下:(1)进入虚拟绘图过程,绘制辅助图形。根据不同的应用,可以使用不同的辅助图形。(2)从辅助图形得出相应信息,搜索出所要拾取的物体。(3)进入真实绘图过程,清除辅助图形,设置背景颜色,绘制真实图形。在不需要拾取物体的时候,不必执行虚拟绘图过程,直接执行步骤(3)进入真实绘图过程即可。
  此种拾取方法与前述的几种拾取方法也有相通之处。与OpenGL的选择机制对比,这种方法虽然没有进入选择模式建立名字堆栈,但在实际应用中,常会利用不同的颜色值来对物体进行区分,其虚拟绘图过程相当于OpenGL的选择模式。射线拾取法是通过复杂的算法来确定物体与选择体之间的空间位置关系,从而选取相应的物体。而这种重绘式拾取法则将确定空间位置关系的工作交给了OpenGL,通过辅助图形和OpenGL提供的函数来选择相应的物体。
2.2 辅助图形
  此方法的第一步虚拟绘图的主要工作就是要绘制辅助图形。辅助图形通常是借助颜色来分辨选中的物体和未被选中的物体。如在点云的框选中,可以将选择区域涂成白色,将未被选择的区域(背景)涂成黑色,白色区域中的点即是所要选择的点。整个白色的选择区域就是在虚拟绘图中所要绘制的辅助图形。
  辅助图形是整个重绘式拾取法的核心。对不同的拾取要求(如点的框选或者是大物体的点选等),辅助图形各不相同。辅助图形的选择决定了拾取功能实现的成功与否。
2.3 搜索物体
  此方法的第二步是搜索物体,它需要根据一些信息来对所有物体进行遍历。目前都是通过颜色信息来确定被选物体。如在点云的框选中,就需要遍历所有的点,其所在位置的颜色就是决定其是否被选中的依据。
  这种重绘式拾取方法在作者自行开发的图形处理系统中已经得到了应用。下面用实例来介绍这种拾取方法的实现过程。
  作者的图形处理系统是根据大量的三维点(点云)进行曲面重构。其中点的拾取是必不可少的。重绘式的拾取方法极其适合点云的框选。其具体处理过程如下。
  (1)绘制辅助图形。此辅助图形为输入设备所提供的选择框,且选择框的形状可任意。选择框的内部填充为白色。
  (2)确定选择框内部的三维点。通过判断三维点所在位置的屏幕颜色来判断此点是否为被选点。被选择的点位于选择框之内,其颜色值应为选择框的颜色(白色)。没被选中的点位于选择框之外,其颜色值应为背景的颜色(黑色)。
  这个过程用到的2个关键OpenGL API函数是glReadPixels与gluProject。首先,用函数glReadPixels读取帧缓存中的象素值。然后用函数gluProject将所有点的三维坐标转换成点在帧缓存中的位移,由这些位移便可以得到每个点在帧缓存中的象素值,从而可以判断出哪些三维点为选中点。
  注意,函数glReadPixels只能读取帧缓存的象素值,捕获不到显示窗口外的象素点。因此,当选择框超过当前窗口的大小时,则需要将坐标系进行缩放,使得选择框能够在当前窗口中全部显示。此外,绘图过程中要使用OpenGL的平坦模式,并且要关闭灯光和颜色抖动,否则将干扰选择程序进行正确的选择。
  (3)清除辅助图形,绘制真实图形。可使用OpenGL的函数glClear清空屏幕和深度缓存,从而清除掉白色实心的选择体。
  图1为作者开发的软件在框选点之前的截图。图2为框选点之后的截图,图中有4万个三维点(有很多重合点)。在框选时,拾取速度很快且没有闪屏和漏选的现象。图2中白色框为选择框,图中的点为选中的点。
  以上所讲的只是重绘式拾取法的一个实例,对于其他的拾取情况,可以采取不同的辅助图形和筛选方法来拾取物体,甚至可以利用光照、颜色抖动、材质等各种OpenGL提供的绘图环境来达到目的。但是这些技术还需要进一步的研究和开发。
1&& Wright R S,Sweet J M.OpenGL超级宝典.北京:人民邮电 出版社,2000
2&& Heran D,Baker M P.计算机图形学.北京:清华大学出版社,1998
3&& 乔林,费广正.OpenGL程序设计.北京:清华大学出版社, 2000
4&& 白燕斌,史惠康.OpenGL三维图形编程指南.北京:机械工 业出版社,1998
本页面信息由华强电子网用户提供,如果涉嫌侵权,请与我们客服联系,我们核实后将及时处理。
应用与方案分类
&&& 目前,处理器性能的主要衡量指标是时钟井间透射波与反射波走时层析成像软件系统设计与开发- 厦门大学学术典藏库- Xiamen University Institutional Repository
JavaScript is disabled for your browser. Some features of this site may not work without it.
井间透射波走时对地层速度的变化比较敏感,利用透射波走时可以较好地反演井间介质的速度分布;而井间反射波走时对介质分界面更敏感,用反射波走时反演井间地层界面将会比透射波走时更有效。联合使用透射波走时和反射波走时资料的层析成像,不仅同时利用了透射波和反射波的信息,而且,大大增加了观测数据个数,减少反演问题的多解性,从而提高层析成像结果的可靠性和分辨率。因此,研究同时利用透射波和反射波走时的井间层析成像方法和技术,具有重要的理论意义和实用价值。 本论文的主要目的是为了设计开发井间透射波与反射波走时联合层析成像软件系统,其主要研究的内容包括:基于Contourlet变换的同相轴增强技术,对地震剖面图进...&Reflection traveltimes are sensitive to both reflector depths and velocity field, and transmission traveltimes are sensitive to the velocity field, so we can obtain better estimates of the crosswell velocity field and reflector structure if we take the tomography method which combined transmission and reflection traveltimes. Moreover, combined transmission and reflection traveltimes increase the q...&
本条目访问地址(URI)
copyright&&&& &&Theme by&&&&&
自日起总访问量:
搜索本专题
copyright&&&& &&Theme by&&&&&
自日起总访问量:OpenGL射线拾取问题
[问题点数:40分]
OpenGL射线拾取问题
[问题点数:40分]
只显示楼主
取消只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 opengl es 拾取 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信