一种三维空间物体拾取方法

文档序号:6340046阅读:818来源:国知局
专利名称:一种三维空间物体拾取方法
技术领域
本发明涉及一种三维空间物体拾取方法,属于计算机图形学领域,特别地,适用于视频后期特效处理与合成软件中。
背景技术
在视频后期特效处理与合成软件中为了达到逼真的图像合成效果,往往都向用户提供一种将图像在三维空间中合成的手段,一般称之为三维合成器。用户可以在三维合成器中添加任意数量的三维物体,比如平面,立方体,球体,还有从三维模型文件导入的三维物体等等,给这些三维物体加上材质属性,光照以及由特效图中的图像构成的纹理即可合成出逼真的三维场景图。而三维合成器的关键之处在于用户可以利用鼠标对三维物体进行交互式的编辑,比如可以对某个物体进行平移,缩放,旋转等等操作,而这些操作的前提是必须有一种高效的三维物体拾取机制,也就是说用户用鼠标点击三维合成器渲染出来的场景图像的某一个点,三维合成器应该能够立刻判断出用户选中了哪个三维物体并对其加以尚壳显不。传统的方法一般是采用OpenGL中的select buffer技术。但近年来OpenGL标准发生了比较大的变化,从core profile3. 2开始的core profile已经开始不支持很多传统的OpenGL技术,这其中就包括select buffer技术,因此如果使用OpenGL core profile 必须采用其它方式进行三维物体拾取;另外,即便就是我们可以使用select buffer技术, 那么单纯使用这种技术也是效率比较低的,因为至少我们要像显卡上传大量的顶点坐标信息,而对于一个非常复杂的场景这往往是比较慢的。

发明内容
针对现有技术中所存在的缺陷,本发明就是提供一种一种三维空间物体拾取方法,包括以下步骤步骤A,对所有的三维物体计算出各自的包围盒,即计算出XYZ三个坐标轴上该物体的最大值与最小值;步骤B,在计算出包围盒之后,对三维空间物体进行拾取。进一步,所述拾取进一步包括步骤1,基于视线与包围盒求交的机制,排除部分物体;步骤2,基于深度信息确定当前拾取的三维物体。上述步骤1进一步包括以下步骤步骤1. 1,进行坐标转换,即通过确定点在空间中的位置坐标,而计算出该点的格式化设备坐标;步骤1. 2,计算出视线,以及视线端点在世界坐标系的坐标;步骤1.3,对于每个三维物体,判断视线与三维物体的包围盒是否相交,如果不相交的话则将该物体排除;如果相交,则执行步骤2。上述步骤2进一步包括以下步骤步骤2. 1,对步骤1. 3中没有被排除的物体进行一次渲染。上述步骤2. 1进一步包括设置深度缓冲值,以区分颜色所在的层次;并进行如下处理步骤判断当前是否还有未处理的三维物体,如果没有,则当前拾取物体即为最终拾取物体;如果有,则渲染该物体。所述渲染该物体包括读取各点的深度缓冲值,如果该值小于当前深度值,则将该三维物体标记为当前拾取物体,并将当前深度值设置为该深度值。本发明的效果可以在一些很复杂的三维场景实现快速的物体拾取。


附图1为本发明基于视线与包围盒求交而排除部分物体的流程示意图;附图2为本发明基于OpenGL确定当前拾取的三维物体的流程示意图。
具体实施例方式下面结合附图和具体实施方式
对本发明作进一步描述。本发明为解决上述问题而提出一种三维空间物体拾取方法,其可基于OpenGL 3. 2Core Profile 来实现。该三维空间物体拾取方法中,包括以下步骤首先,对所有的三维物体计算出各自的包围盒,也就是XYZ三个坐标轴上该物体的最大值与最小值。对于一个三维合成系统来说包围盒是很容易得出的,也是必备的。其次,在计算出包围盒之后,对三维空间物体进行拾取。该拾取步骤进一步包括两个步骤步骤1,基于视线与包围盒求交的机制,排除部分物体;步骤2,基于深度信息确定当前拾取的三维物体。如附图1所示,在上述步骤1中,首先进行坐标转换,即通过确定点在空间中的位置坐标,而计算出该点的格式化设备坐标。其次,计算出视线,以及视线端点在世界坐标系的坐标。接着,对于每个三维物体,将视线的两个端点从世界坐标系变换到该物体的模型坐标系。之后对视线与三维物体的包围盒求交,如果不相交的话则将该物体排除,否则这个物体将会在下一阶段进行拾取处理。一个可操作的实施方式中,以基于OPENGL的实施方式为例说明该步骤。通过用户鼠标点击的像素在窗体中的位置计算出该点格式化设备坐标NDCfcormalized device coordinates)。通过NDC再利用投影变换矩阵(projection matrix)的逆矩阵求出视线在近平面(near plane)与远平面(far plane)的交点,这两个交点所构成的直线即为视线。 将视线的两个端点利用观察矩阵(view matrix)的逆矩阵求出其在世界坐标系下的坐标, 之后对三维场景中的每一个物体进行下一步处理。对于每个三维物体,将视线的两个端点从世界坐标系变换到该物体的模型坐标系。之后对视线与三维物体的包围盒求交,如果不相交的话则将该物体排除,否则这个物体将会在下一阶段进行拾取处理。对于某物体,利用该物体的模型矩阵(model matrix)的逆矩阵将上面的视线的两个端点从世界坐标系变换到模型坐标系下。之后对视线与三维物体的包围盒求交,如果不相交的话则将该物体排除, 否则这个物体将会在下一阶段进行拾取处理。这一阶段的处理可以有效地将完全不与视线相交的物体排除掉,从而在下一步大量节省向显卡传输顶点信息所需的带宽。在上述步骤2中,确定当前拾取的三维物体。对每个在上一阶段没有被排除的物体进行一次渲染。设置深度缓冲信息,以区分颜色所在的层次,防止被遮挡住的颜色显示出来,深度缓冲可用一数值表示,表示该数值范围内的对象能够被渲染。对每一个三维物体进行如下处理步骤判断当前是否还有未处理的三维物体,如果没有,则当前拾取物体即为最终拾取物体。如果有,则渲染该物体。在上述步骤中,如果有未处理的三维物体,则进一步读取深度缓冲值,如果小于当前深度值则将该三维物体标记为当前拾取物体,并将当前深度值设置为该深度值。以基于OPENGL的实施方式为例说明步骤2。参见图2,可以采用OpenGL中的帧缓存对象Frame buffer object (FBO)对物体进行渲染,在Frame buffer object中添加只有一个像素大小的渲染缓存render buffer,再添加一个只有一个像素大小的深度缓存cbpth buffer。建立与待拾取图像一样的投影变换,但本发明的视点viewport的指定则采用下面的方法假设窗体的宽与高分别为W与H,用户所点击的像素的左下角坐标为0(hJh),则设定的viewport的左下角坐标为(_Xh,-Yh),而viewport的宽与高则分别为W与H。之后对每一个三维物体进行下述处理打开采样通过查询,在OpenGL中,可通过调用glBeginQuery来实现。而后渲染该三维物体。调用glEndQuery关闭采样通过查询, 并调用gWetQueryObject取得本次渲染所通过的采样数量。如果通过的采样数量为0则结束对当前三维物体进行的拾取判定,否则进行下一步处理。调用glReadPixels读取当前的深度值,如果这个深度值小于当前深度值(初始情况下当前深度值为1)则将该三维物体标记为当前拾取物体,并将当前深度值设置为该深度值。在对所有三维物体都进行了上述处理后,当前拾取物体即为最终的拾取物体。这种方案只用了一个Ixl大小的图像进行渲染从而大大节省了 OpenGL的像素处理次数。通过上述实施例可以看出,本发明提供了利用视线与包围盒求交的机制来排除部分物体的方案,以及利用单像素render buffer及d印th buffer来节省渲染时间的方案, 可以在一些很复杂的三维场景实现快速的物体拾取。本发明所述的方法和系统并不限于具体实施方式
中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
权利要求
1.一种三维空间物体拾取方法,包括以下步骤步骤A,对所有的三维物体计算出各自的包围盒,即计算出XYZ三个坐标轴上该物体的最大值与最小值;步骤B,在计算出包围盒之后,对三维空间物体进行拾取。
2.根据权利要求1所述的三维空间拾取方法,其特征在于所述拾取进一步包括 步骤1,基于视线与包围盒求交的机制,排除部分物体;步骤2,基于深度信息确定当前拾取的三维物体。
3.根据权利要求2所述的三维空间拾取方法,其特征在于上述步骤1进一步包括以下步骤步骤1.1,进行坐标转换,即通过确定点在空间中的位置坐标,而计算出该点的格式化设备坐标;步骤1. 2,计算出视线,以及视线端点在世界坐标系的坐标;步骤1. 3,对于每个三维物体,判断视线与三维物体的包围盒是否相交,如果不相交的话则将该物体排除;如果相交,则执行步骤2。
4.根据权利要求3所述的三维空间拾取方法,其特征在于上述步骤2进一步包括以下步骤步骤2. 1,对步骤1. 3中没有被排除的物体进行一次渲染。
5.根据权利要求4所述的三维空间拾取方法,其特征在于上述步骤2.1进一步包括 设置深度缓冲值,以区分颜色所在的层次;并进行如下处理步骤判断当前是否还有未处理的三维物体,如果没有,则当前拾取物体即为最终拾取物体;如果有,则渲染该物体。
6.根据权利要求5所述的三维空间拾取方法,其特征在于所述渲染该物体包括读取各点的深度缓冲值,如果该值小于当前深度值,则将该三维物体标记为当前拾取物体,并将当前深度值设置为该深度值。
7.根据权利要求6所述的三维空间拾取方法,其特征在于在渲染该物体之前,初始化当前深度值。
全文摘要
本发明提供一种三维空间物体拾取方法,对所有的三维物体计算出各自的包围盒,在计算出包围盒之后,对三维空间物体进行拾取。所述拾取进一步包括基于视线与包围盒求交的机制,排除部分物体以及基于深度信息确定当前拾取的三维物体。通过判断视线与三维物体的包围盒是否相交,而进行物体排除,没有被排除的物体进行渲染。并设置深度缓冲值,以区分颜色所在的层次。本发明所述的方法可以在一些很复杂的三维场景实现快速的物体拾取。
文档编号G06T19/20GK102542611SQ20101060711
公开日2012年7月4日 申请日期2010年12月27日 优先权日2010年12月27日
发明者刘铁华, 见良, 许小飞, 郑鹏程 申请人:新奥特(北京)视频技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1