基于OPENGL 三维拾取技术研究.doc
《基于OPENGL 三维拾取技术研究.doc》由会员分享,可在线阅读,更多相关《基于OPENGL 三维拾取技术研究.doc(9页珍藏版)》请在三一办公上搜索。
1、基于OpenGL三维拾取技术研究刘彬 孙永 高明 马克 李晓诗(解放军信息工程大学测绘学院 河南郑州陇海中路66号 450052 )【摘要】在OpenGL环境中,三维场景是通过二维平面表现的,本文通过对这种表现原理的研究,介绍了“射线拾取法”和“包围盒法”两种算法,分析了其实现的原理,并介绍了相关的核心算法。在此基础之上,又提出了一种适用于基于DEM的三维系统的改进算法,把三维空间中的拾取问题转化到了二维平面上,大大简化了拾取的抽象性和复杂性,提高了拾取的效率,更易于理解和实现。【关键字】DEM OpenGL 拾取 光标投影模型1. 引言在三维图形系统中,现实世界中的物体要依次通过模型视点变换
2、,投影变换和视口变换才影射到屏幕窗口上的,而对物体的拾取操作,其实就是在二维屏幕上对三维空间中的物体的拾取技术。2. 射线拾取技术射线拾取算法是判断由视点发出经屏幕光标的射线是否与目标物体相交。其具体的实现实现方法如下所示:(1) 确定射线的位置及方向,可以通过取得射线与远近两个裁减面的交点来确定。(2) 判断射线与拾取目标是否有交点,因为在射线上,任意一点可以表 示为单位向量(L)与模(len)的乘积,所以交点可以表示为:X= P+L*len ;又因为三角形内的任意一点都可以用变量u、v和其三个顶点坐标来确定,其中0u1 0v1、,0u+v1。设三个顶点为T1,T2,T3则:X= T1 +
3、u*( T2T1) + v*( T3 T1) ;由此可以得出PT1 =( L*len) + u*( T2T1) + v*( T3 T1) ,即方程组:(-L.x)*len +( T2.x- T1.x)*u + (T3.x T1.x )*v = P.x T1.x(-L.y)*len +( T2.y- T1.y)*u + (T3.y T1.y )*v = P.y T1.y(-L.z)*len +( T2.z- T1.z)*u + (T3.z T1.z )*v = P.z T1.z这是一个线性方程组,根据克拉姆法则,当满足条件:0v1,0u0, ,0u+v1 和【L,T2T1,T3T1】不为零则射线
4、和三角形相交。具体的编程实现可以参考Micarosoft公司提供的相关算法,由于篇幅有限,在此就不做详细的说明。3. 包围盒技术31 包围盒技术的原理由于在具体的拾取操作中,我们并不需要非常精确的拾取目标物体上的某一点,而是对其选中后进行如平移、旋转、缩放等编辑工作,所以可以牺牲一部分拾取的精确度,而提高其效率。包围盒技术是基于射线拾取技术的一种更加简单高效的拾取方法,它对每个三维场景中需要进行拾取操作的对象设定一个包围域,这个包围域是能够包围对象的最小矩形,该矩形边与坐标轴是对齐的,其左下顶点的x 、y 、z坐标值为实体所有顶点相应坐标值的最小值,其右上顶点的坐标值为实体所有顶点相应坐标值的
5、最大值。由此可以大大降低实现拾取功能的复杂性。32包围盒技术的实现方法如今比较流行的一种包围盒的算法是在视点和鼠标点确定的直线上,找出以近裁减面交点为起点指向远裁减点的向量,求向量各分量和离起点最近的三个包围盒侧面所在平面的交点,如果各分量与平面的交点都在包围盒侧面上或者在包围盒内且在各分量上,则线段wnearwfar和包围盒相交(本文中我们把线段与包围盒相交和线段在包围盒内这两种情况统称为相交)。判断线段与包围盒相对位置的具体步骤如下5:(1) 判断起点wnear是否在包围盒内,如果在盒内,则线段wnearrwfar和包围盒相交,判断结束;如果不在盒内,则记下该包围盒离起点wnear最近的三
6、个侧面,这三个侧面必定共点且相互垂直;(2) 过起点wnear向各侧面做垂线,得到三个垂足,连接点wnear和各垂得到三个向量A1 、A2 、A3,并求A1 、A2 、A3和向量wnearrwfar各相应分量的比值ti=Aiwnearrwfar (i=1,2,3)。如果wnearrwfar的某个分量为零,则比值取一1。取t1、t2、t3中的最大值为tmax,如果tmax1,则wnearrwfar和包围盒不相交,判断结束;4. 基于DEM的三维拾取方法基于DEM的三维图形系统中,地面模型是在某一参考平面上构建均匀网格,并在的各顶点坐标中加入高度坐标Z得到的,它与参考平面具有固定的位置关系。系统中
7、的各种模型的都与DEM数据有着固定的位置关系,即与参考也有着固定的位置关系。在进行三维漫游的过程中,虽然改变了视点和透视窗口,但这种相对位置关系是保持固定的,我们可以利用这种关系把三维空间中的拾取问题转化到参考平面上,通过比较参考平面上光标投影和实体包围盒投影的位置关系判断是否进行拾取,其中参考平面的高度Z可以通过人机交互设置。4.1 拾取原理及实现4.1.1模型及空间实体模型与参考平面的位置关系LWZWXWYOL 图:1-1 世界坐标系下参考平面与DEM模型及实体模型的位置关系如上图1-1所示,世界坐标系下,在DEM构建的地形模型中,平面L为参考平面,K为三维空间中某模型的矩形包围盒,它的每
8、个边分别与坐标轴平行4。 参考平面在构建时亦是与坐标平面平行的,这里设置为平面L(WZ=0);平面L平行于L ,K为K与L的交平面,显然K为矩形,且其四个顶点坐标的XY值与包围盒上对应点的XY值相同。4.1.2 建立光标在参考平面上的投影模型光标通过鼠标控制在二维屏幕坐标系上运动。在实现拾取操作时,传统的算法是通过控制具有二维属性的光标实现对三维物体的拾取,拾取的实现算法比较复杂,结合DEM模型的特点,可以在三维世界坐标系中构建二维光标的投影模型,把对二维光标三维化,如图1-2所示。其实原理如下:l 找到从视点O出发经光标的射线与视景体远近裁减面ABCD和A,B,C,D,的交点P,P,将问题转
9、化到三维世界坐标系中。l 视景体内确定一条以远近裁减面交点为端点的线段P P,l 计算线段和参考平面的交点M,既为光标M在参考平面上的投影点, 可以通过交互实现对参考平面高度Z的控制,也即实现了投影点在Z方向上的自由度。0M,ML图:1-2 透视场景、屏幕及参考面在DEM构建的地形模型上,我们希望光标的投影模型是在地形表面上移动的,从而达到对地表模型(如树木、房屋、车辆)的拾取操作。本文给出一种OpengGL环境中的建立光标投影模的算法,以供参考:(1) 调用OpenGL实用库提供的gluUnProject函数得到从视点发出经光标点M的射线与远近裁减面的交点P(Wx,Wy,Wz)P,(Wx,W
10、y,Wz,)。gluUnProject函数具体使用方法如下所示: gluUnProject(GLdouble)xpos , (GLdouble)ypos , 1.0 , mvmatrix , projmatrix , viewport , &Wx , &Wy , &Wz);xpos 和ypos 是以屏幕左下角为原点的屏幕坐标,1.0代表返回zbuffer为1.0处(远剪切面交点)的世界坐标(为0.1则表示进裁剪面交点),mvmatrix为视矩阵,通过函数glGetDoublev(GL_MODELVIEW_MATRIX , mvmatrix)得到,projmatrix为投影矩阵,通过函数glGe
11、tDoublev(GL_PROJECTION_MATRIX , projmatrix)得到,viewport为视口,通过函数glGetIntegerv(GL_VIEWPORT , viewport)得到,剩下的Wx、Wy、Wz 就是我们要得到的世界坐标系中的交点坐标。(2) 如图2-3所示,根据交点P P,得到向量F(WxWx,WyWy,WzWz,),并计算其与参考平面Wz =0的交点M,的x,y分量,计算公式如下,M,x= Wx+( Wx,Wx)* abs(Wz) /(abs(Wz)+abs(Wz,)M,y= Wy+( Wy,Wy)* abs(Wz) /(abs(Wz)+abs(Wz,)(3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于OPENGL 三维拾取技术研究 基于 OPENGL 三维 拾取 技术研究
链接地址:https://www.31ppt.com/p-2884016.html