一种立体碰撞检测物体拾取方法及装置的制作方法

文档序号:6373298阅读:106来源:国知局
专利名称:一种立体碰撞检测物体拾取方法及装置的制作方法
技术领域
本发明属于碰撞检测技术领域,尤其涉及一种立体碰撞检测物体拾取方法及装置。
背景技术
由于人的双眼观察物体的角度略有差异,因此能够辨别物体远近,产生立体的视觉。3D电视正是利用这个原理,把左右眼所看到的影像分离,从而产生呼之欲出的立体视界。相比普通的2D画面,3D画面的纵深感更强、更逼真,让观众有身临其境的感觉。也正是由于这种身临其境的视觉效果使得3D娱乐备受消费者推崇。大部分智能3D电视是基于主动快门式3D原理实现的,通过把图形按帧一分为二,形成对应左眼和右眼的两组画面,连续交错显示出来,同时红外信号发射器将同步控制快门式3D眼睛的左右镜片开关,使左右 眼能够在正确的时刻看到相应的画面,形成立体影像。为了让用户能与立体影像进行实时交互,获取更高的体验效果,需要解决的首要问题是如何拾取立体影像中的物体,让用户有触碰真实物体的感觉,现有立体影像物体拾取技术,还未考虑立体影像检测的方法,而一般的3D光线碰撞检测方法只适用于检测单屏正居中的一幅画面,对于主动快门式3D成像技术所采用的两屏画面或者两组画面无法正确检测,而且非居中偏移的画面也无法正确检测,因此导致拾取物体不正确,拾取到物体和预想中的大相径庭,或者完全拾取不到。

发明内容
鉴于上述问题,本发明的目的是提供一种立体碰撞检测物体拾取方法,旨在解决现有一般光线检测物体拾取方法无法正确拾取到两屏画面或者两组画面立体影像中的物体的技术问题。本发明是这样实现的,一种立体碰撞检测物体拾取方法,所述包括系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口 ;获取与当前鼠标光标所处视口对应的视景体信息;对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置;根据偏移鼠标光标位置和视景体信息获取拾取射线并进行物体拾取。本发明的另一目的在于提供一种立体碰撞检测物体拾取装置,所述装置包括视口判定单元,用于系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口;视景体信息获取单元,用于获取与当前鼠标光标所处视口对应的视景体信息;鼠标光标偏移单元,用于对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置;物体拾取单元,用于根据偏移鼠标光标位置和视景体信息获取拾取射线并进行物体拾取。
在本发明实施例中,通过获取鼠标光标位置所处的正确视口、与该视口对应的视景体信息,以及鼠标光标的偏移位置,再结合一般光线检测物体检测原理,在两屏画面立体场景中,包括上下两屏或左右两屏,可以获取正确的拾取光线进行物体拾取,给用户提供了一种更为真实的交互环境,同时也在3D立体场景中,模拟更多的真实效果,也为在智能3D电视上实现虚拟世界提供了可能。


图I是本发明第一实施例提供的一种 立体碰撞检测物体拾取方法的流程图;图2是图I或者图4中透视视景体示意图;图3是本发明第二实施例提供的一种立体碰撞检测物体拾取方法的又一实施方式流程图;图4是本发明第三实施例提供的一种立体碰撞检测物体拾取装置的结构方框图;图5是本发明第四实施例提供的一种立体碰撞检测物体拾取装置的又一实施方式结构方框图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。实施例一:图I示出了本发明第一实施例提供的一种立体碰撞检测物体拾取方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。本实施例提供的方法,包括步骤S101、系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视□。对于一般3D光线碰撞检测,用户通过操作鼠标光标来拾取屏幕上的物体,事件UI线程负责处理鼠标消息,而Render线程负责3D场景的渲染。在3D场景交互时,需要将UI线程的鼠标消息传递到Render线程中。基于主动快门式3D成像原理,3D场景需要设置为对应左眼和右眼的两组相同的画面,可以为左右相同的两组画面或者上下相同的两组画面,对于本实施例在这两屏画面立体场景中的物体拾取,同样首先要捕获到用户在画面中选取物体所产生的系统鼠标消息,也即预设鼠标消息,此时获取到鼠标光标在当前视口的位置MousePosition参数,例如鼠标光标所处视口具体为两屏画面中的第一个视口 ViewPortl或者第二个视口ViewPort20步骤S102、获取与当前鼠标光标所处视口对应的视景体信息。根据一般光线碰撞检测的原理,光线拾取物体时需要用到与场景对应的Camera(视景体)信息,那么在消息处理时间不确定的情况下,可能出现检测不正确的问题,因此在本步骤中需要正确获取到当前鼠标光标所在视口对应的Camera (视景体)信息。
步骤S 103、对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置。在立体成像中,时常需要调整上下格式或者左右格式场景的位置,或者Camera的位置获取更好的视差、层次关系。一般光线检测方法是正居中的检测方法,如果场景偏移以后,光线就会获取不正确,从而导致检测不正确。在本步骤中需要对系统鼠标消息位置进行偏移得到偏移鼠标光标位置。步骤S104、根据偏移鼠标光标位置和视景体信息获取拾取射线并进行物体拾取。根据碰撞检测理论知识,可知正确碰撞检测的三个必备条件为鼠标光标位置正确,ViewPort (视口)正确,Camera (视景体)信息正确。参照如图2所示的透视视景体示意图,以Camera的位置Position为视点引出视椎体,图中示出了视椎体的近剪裁面ZNear和远剪裁面ZFar,只有在ZNear与ZFar之间的物体才能够被看到,而在上述几个步骤中,已经获取到了正确的ViewPort、ViewPort中偏移鼠标光标位置,以及ViewPort对应的Camera(视景体)信息,因此直接根据这些信息,采用一般碰撞检测原理,可以得到鼠标光标位置在·远剪裁面ZFar上的位置Pl,参照图2,图示中,以Camera的位置Position为原点指向Pl点的射线即为拾取射线,根据所述拾取射线,寻找到距离射线原点最近的一个相交物体即为所需拾取的物体。在本发明实施例中,通过正确获取到两屏画面立体场景中的接收到鼠标消息时鼠标光标所处的视口、所述视口对应的视景体信息,以及经过偏移修正后的鼠标光标位置,结合碰撞检测理论,可以获取到正确的拾取射线拾取到立体影像的物体,给用户提供了一种更为真实的交互环境。实施例二 :图3示出了本发明第二实施例提供的一种立体碰撞检测物体拾取方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。本实施例提供的方法,包括步骤S301、初始化场景、视口、视景体、场景物体。对于基于主动快门式3D成像原理的3D场景开发,由于3D场景需要设置为对应左眼和右眼的两组相同的画面,包括左右相同画面格式或者上下相同画面格式,通过3D电视的硬件设备、3D眼镜将两幅画面合并为一个重合的画面,类似我们左右眼合成图像一样,呈现给用户立体的画面,在这里首先需要初始化立体场景,主要是一些画面背景,接着初始化两屏画面的视口 ViewPort,包括两个视口的位置、大小等,同时需要初始化视口对应的视景体Camera的位置和开角,最后在初始化立体场景中的各个物体,譬如墙壁、树木、台阶等等,经过初始化后物物体才能在画面中显示出来,当初始化步骤完毕后,为后续立体场景物体拾取做准备。步骤S302、将屏幕坐标转换为OpenGL坐标。通常在绘制画面时用到OpenGL开发工具,对于两屏检测,先按照屏幕坐标划分两屏绘图区域的视口 ViewPort,其左上角为 LeftUp (X,Y),通过 WidthHight (width, hight)函数获取屏幕 Screen 的宽 Width 和高 Hight,由于 OpengGL 的 glViewport (x, y, width,hight)窗口函数设置的窗口起始点坐标与屏幕的坐标不一致,因此需要进行坐标转换,转换方法具体如下GLViewPort. X=ViewPort. LeftUp. X
GLViewPort. Y=Screen. Hight-ViewPort. LeftUp. Y-ViewPort. WidthHight. hightGLViewPort. Width=ViewPort. WidthHight. widthGLViewPort. Hight=ViewPort. WidthHight. Hight其中,GLViewPort为 glViewport 的对象,ViewPort 为视口绘图区域,Screen 为当前屏幕,GLViewPort. X和GLViewPort. Y分别表示在OpenGL坐标中视口左上角的X轴值和Y轴值,GLViewPort. Width和GLViewPort. Hight在OpenGL坐标中视口的宽度和高度,ViewPort. LeftUp. X和ViewPort. LeftUp. Y为在屏幕坐标中视口左上角的X轴值和Y轴值,Screen. Hight 为屏幕的高度,ViewPort. WidthHight. Width 和 ViewPort. WidthHight.Hight分别表示视口的宽度和高度。步骤S303、系统产生预设鼠标消息时获取鼠标光标位置。当用户通过鼠标点击到画面中的物体来拾取物体时,n线程会产生一个系统鼠标消息给render线程,当render线程获取到该鼠标消息时,获取当前鼠标光标在屏幕的位置MousePosition。步骤S304、当所述鼠标光标位置的X轴值在视口的宽度范围内且Y轴值在视口的高度范围之内,即可判定鼠标光标处于所述视口。步骤S303-S304是步骤SlOl的一种优选的实现方式,获取到鼠标光标在屏幕中的位置后,本步骤需要判断当前鼠标光标所处的ViewPort,具体的,作为一种实现方式,判断条件为当所述鼠标光标位置的X轴值在视口的宽度范围内且Y轴值在视口的高度范围之内,即可判定鼠标光标处于所述视口,即(MousePosition. X>=ViewPort.LeftUp. X&& MousePosition.X<=ViewPort. LeftUp. X+ViewPort. WidthHight. Width)&& (MousePosition. Y>=ViewPort. LeftUp. Y&& MousePosition. Y<=ViewPort. LeftUp.Y+ViewPort. WidthHight. Hight),其中 MousePosition. X 和 MousePosition. Y 分别为鼠标光标位置的X轴值和Y轴值,ViewPort. LeftUp. X和ViewPort. LeftUp. Y分别为视口左上角的 X 轴值和 Y 轴值,ViewPort. WidthHight. Width 和 ViewPort. WidthHight. Hight 分别为视口的宽度和高度。当前鼠标光标在两个视口中的某个视口中,返回该视口。步骤S305、获取与当前鼠标光标所处视口对应的视景体信息。根据碰撞检测理论,可知正确碰撞检测的三个必备条件为鼠标光标位置正确,ViewPort (视口)正确,Camera (视景体)信息正确。为了获取到正确的Camera (视景体)
信息,这里定义结构体,结构体中设置有视景体的指针信息,方便获取视景体的信息。
权利要求
1.一种立体碰撞检测物体拾取方法,其特征在于,所述方法包括 系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口 ; 获取与当前鼠标光标所处视口对应的视景体信息; 对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置; 根据偏移鼠标光标位置和视景体信息获取拾取射线并进行物体拾取。
2.如权利要求I所述方法,其特征在于,在所述系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口步骤之前,还包括 将屏幕坐标转换为OpenGL坐标。
3.如权利要求2所述方法,其特征在于,在所述将屏幕坐标转换为OpenGL坐标步骤之前,还包括 初始化场景、视景体、视口、场景物体。
4.如权利要求1-3任一项所述方法,其特征在于,所述系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口步骤,具体包括 系统产生预设鼠标消息时获取鼠标光标位置; 当所述鼠标光标位置的X轴值在视口的宽度范围内且Y轴值在视口的高度范围之内,即可判定鼠标光标处于所述视口。
5.如权利要求1-3任一项所述方法,其特征在于,所述对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置步骤,具体包括 偏移鼠标光标位置的X轴值为系统鼠标光标位置X轴值与视口左上角的X轴值的差值,偏移鼠标光标位置的Y轴值为系统鼠标光标位置Y轴值与视口左上角的Y轴值的差值;若偏移鼠标光标位置的X轴值或Y轴值小于零,则丢弃该偏移鼠标光标位置。
6.一种立体碰撞检测物体拾取装置,其特征在于,所述装置包括 视口判定单元,用于系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口 ; 视景体信息获取单元,用于获取与当前鼠标光标所处视口对应的视景体信息; 鼠标光标偏移单元,用于对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置; 物体拾取单元,用于根据偏移鼠标光标位置和视景体信息获取拾取射线并进行物体拾取。
7.如权利要求6所述装置,其特征在于,所述装置还包括 坐标变换单元,用于将屏幕坐标转换为OpenGL坐标。
8.如权利要求7所述装置,其特征在于,所述装置还包括 初始化单元,用于初始化场景、视口、视景体、场景物体。
9.如权利要求6-8任一项所述装置,其特征在于,所述视口判定单元包括 鼠标光标位置获取模块,用于系统产生预设鼠标消息时获取鼠标光标位置; 鼠标光标所属视口判定模块,用于当所述鼠标光标位置的X轴值在视口的宽度范围内且Y轴值在视口的高度范围之内,即可判定鼠标光标处于所述视口。
10.如权利要求6-8任一项所述装置,其特征在于,所述鼠标光标偏移单元具体包括 偏移位置获取模块,偏移鼠标光标位置的X轴值为系统鼠标光标位置X轴值与视口左上角的X轴值的差值,偏移鼠标光标位置的Y轴值为系统鼠标光标位置Y轴值与视口左上角的Y轴值的差值; 位置判定模块,用于若偏移鼠标光标位置的X轴值或Y轴值小于零,则丢弃该偏移鼠标光标位置。
全文摘要
本发明适用于碰撞检测技术领域,提供一种立体碰撞检测物体拾取方法,其特征在于,所述方法包括系统产生预设鼠标消息时获取鼠标光标位置,并判定鼠标光标所处视口;获取与当前鼠标光标所处视口对应的视景体信息;对系统鼠标光标位置进行偏移转换得到偏移鼠标光标位置;根据偏移鼠标光标位置和视景体信息获取拾取射线并进行物体拾取。本发明通过获取鼠标光标位置所处的正确视口、与该视口对应的视景体信息,以及鼠标光标的偏移位置,再结合一般光线检测物体检测原理,在两屏画面立体场景中,包括上下两屏或左右两屏,可以获取正确的拾取光线进行物体拾取,给用户提供了一种更为真实的交互环境。
文档编号G06F3/048GK102799378SQ20121024416
公开日2012年11月28日 申请日期2012年7月13日 优先权日2012年7月13日
发明者赵智宝, 卢伟超 申请人:Tcl集团股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1