屏幕空间标签碰撞检测方法、装置、计算机设备及存储介质制造方法及图纸

技术编号:37445088 阅读:10 留言:0更新日期:2023-05-06 09:17
本发明专利技术实施例公开了屏幕空间标签碰撞检测方法、装置、计算机设备及存储介质。方法包括:搭建3D场景;创建Rbush树实例对象,并创建Map对象;获取需要在3D场景中绘制的标签,以得到标签数组;遍历标签数组;获取当前标签的世界空间位置、屏幕空间位置;计算当前标签的包围盒;利用Rbush树实例对象确定与包围盒相交的屏幕空间包围盒数组;判断当前标签的屏幕空间位置是否存在包围盒;若否,则将包围盒存入Rbush树内,并将当前标签的标签信息存入到Map对象中;将当前标签加入3D场景中,在3D场景中绘制当前标签。通过实施本发明专利技术实施例的方法可实现不需要手动设置标签的渲染顺序,保证当前屏幕空间不存在相互重叠的标签。屏幕空间不存在相互重叠的标签。屏幕空间不存在相互重叠的标签。

【技术实现步骤摘要】
屏幕空间标签碰撞检测方法、装置、计算机设备及存储介质


[0001]本专利技术涉及标签检测方法,更具体地说是指屏幕空间标签碰撞检测方法、装置、计算机设备及存储介质。

技术介绍

[0002]大多数基于WEBGL的项目需要渲染大量的标签或者文字,用于标记各种建筑物的名称或者建筑物的类型,在多数情况下标签随着相机远近会进行不同程度的缩放,导致文字相互重叠,透明标签渲染次序会相互干扰,对于用户来说标签的辨识度不高,用户体验极为不友好,为解决此类问题特设此专利技术。
[0003]在实际开发过程中,基于WEBGL(3D绘图协议,Web Graphics Library)的标签绘制是任意WEBGL项目都需要的重要组件,一般为了解决标签绘制相互重叠,会使用标签到相机的距离偏移标签的位置,并且需要手动设置标签的渲染顺序,解决标签相互重叠导致的渲染次序,这种偏移或者绘制顺序是需要手动设置,调试难度大并且重叠的标签也会被绘制,渲染性能较差。
[0004]因此,有必要设计一种新的方法,实现不需要手动设置标签的渲染顺序,保证了当前屏幕空间不存在相互重叠的标签,提高了用户对标签的辨识度,不需要手动按距离设置标签的偏移量。

技术实现思路

[0005]本专利技术的目的在于克服现有技术的缺陷,提供屏幕空间标签碰撞检测方法、装置、计算机设备及存储介质。
[0006]为实现上述目的,本专利技术采用以下技术方案:屏幕空间标签碰撞检测方法,包括:搭建3D场景;利用Rbush库创建一个Rbush树实例对象,并创建javascript的Map对象;获取需要在所述3D场景中绘制的标签,以得到标签数组;遍历所述标签数组;对所述标签组内的每个标签,获取当前标签的世界空间位置;获取当前标签的屏幕空间位置;计算当前标签在屏幕空间的包围盒;利用所述Rbush树实例对象确定与当前标签的包围盒相交的屏幕空间包围盒数组;根据所述屏幕空间包围盒数组判断当前标签的屏幕空间位置是否存在包围盒;若当前标签的屏幕空间位置不存在包围盒,则将当前标签对应的包围盒存入Rbush树内,并将当前标签的标签信息存入到Map对象中;将当前标签加入至所述3D场景中,在所述3D场景中绘制当前标签。
[0007]其进一步技术方案为:所述利用所述Rbush树实例对象判断当前标签的屏幕空间
位置是否存在包围盒之后,还包括:若当前标签的屏幕空间位置存在包围盒,则遍历与当前标签的包围盒相交的屏幕空间包围盒数组,并采用Map对象结合所述屏幕空间包围盒数组对当前标签的包围盒进行相交检测;当所述屏幕空间包围盒数组中没有一个包围盒与当前标签的包围盒相交,则执行所述将当前标签对应的包围盒存入Rbush树内;当所述屏幕空间包围盒数组中有至少一个包围盒与当前标签的包围盒相交,则停止遍历与当前标签的包围盒相交的屏幕空间包围盒数组,并隐藏当前标签。
[0008]其进一步技术方案为:所述获取需要在所述3D场景中绘制的标签,以得到标签数组,包括:获取需要在3D场景中绘制的标签信息;将所述标签信息存于数组中,以得到标签数组。
[0009]其进一步技术方案为:当前标签在屏幕空间的包围盒包括当前标签的宽高以及当前标签在屏幕空间内的位置信息。
[0010]其进一步技术方案为:所述根据所述屏幕空间包围盒数组判断当前标签的屏幕空间位置是否存在包围盒,包括:确定与所述包围盒相交的屏幕空间包围盒数组的长度,以得到数组长度;根据所述数组长度判断所述当前标签的屏幕空间内是否有其他标签;若所述当前标签的屏幕空间内没有其他标签,则确定所述当前标签的屏幕空间位置没有存在包围盒;若所述当前标签的屏幕空间内有其他标签,则确定所述当前标签的屏幕空间位置存在包围盒。
[0011]其进一步技术方案为:所述遍历与当前标签的包围盒相交的屏幕空间包围盒数组,并采用Map对象结合所述屏幕空间包围盒数组对当前标签的包围盒进行相交检测,包括:遍历与当前标签的包围盒相交的屏幕空间包围盒数组;对于与当前标签的包围盒相交的屏幕空间包围盒数组每个包围盒,获取所述屏幕空间包围盒数组内的包围盒,以得到待遍历包围盒;采用Map对象将所述待遍历包围盒以及当前标签的包围盒进行碰撞检测,以得到检测结果;判断所述检测结果是否是所述待遍历包围盒与当前标签的包围盒存在空间相交;若所述检测结果是所述待遍历包围盒与当前标签的包围盒存在空间相交,则确定所述屏幕空间包围盒数组中有至少一个包围盒与当前标签的包围盒相交;若所述检测结果不是所述待遍历包围盒与当前标签的包围盒存在空间相交,则当所有待遍历包围盒都与当前标签的包围盒不存在空间相交,确定所述屏幕空间包围盒数组中没有一个包围盒与当前标签的包围盒相交。
[0012]其进一步技术方案为:所述采用Map对象将所述待遍历包围盒以及当前标签的包围盒进行碰撞检测,以得到检测结果,包括:利用所述待遍历包围盒的信息,通过Map对象获取所述待遍历包围盒对应的标签
的信息;提取所述待遍历包围盒对应的标签内每个单体元素的宽高信息,并构建每个单体屏幕空间包围盒信息,以得到第一单体信息;提取当前标签的包围盒对应的标签每个单体元素,并构建每个单体的屏幕空间包围盒,以得到第二单体信息;根据所述第一单体信息以及所述第二单体信息通过二维AABB检测算法进行碰撞检测,以得到检测结果。
[0013]本专利技术还提供了屏幕空间标签碰撞检测装置,包括:搭建单元,用于搭建3D场景;创建单元,用于利用Rbush库创建一个Rbush树实例对象,并创建javascript的Map对象;标签数组形成单元,用于获取需要在所述3D场景中绘制的标签,以得到标签数组;遍历单元,用于遍历所述标签数组;第一位置获取单元,用于对所述标签组内的每个标签,获取当前标签的世界空间位置;第二位置获取单元,用于获取当前标签的屏幕空间位置;包围盒计算单元,用于计算当前标签在屏幕空间的包围盒;数组确定单元,用于利用所述Rbush树实例对象确定与所述包围盒相交的屏幕空间包围盒数组;判断单元,用于根据所述屏幕空间包围盒数组判断当前标签的屏幕空间位置是否存在包围盒;第一存入单元,用于若当前标签的屏幕空间位置不存在包围盒,则将当前标签对应的包围盒存入Rbush树内,并将当前标签的标签信息存入到Map对象中;第二存入单元,用于将当前标签加入至所述3D场景中,在所述3D场景中绘制当前标签。
[0014]本专利技术还提供了一种计算机设备,所述计算机设备包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现上述的方法。
[0015]本专利技术还提供了一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述的方法。
[0016]本专利技术与现有技术相比的有益效果是:本专利技术通过构建Rbush树实例对象以及Map对象,使用屏幕空间碰撞检测,判断当前标签对应的屏幕空间是否已经存在标签,后序加入的标签不会被绘制,保证当前屏幕空间只有一个标签被绘制,实现不需要手动设置标签的渲染顺序,保证了当前屏幕空间不存在相互重叠的标签,提高了用户对标签的辨识度,不本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.屏幕空间标签碰撞检测方法,其特征在于,包括:搭建3D场景;利用Rbush库创建一个Rbush树实例对象,并创建javascript的Map对象;获取需要在所述3D场景中绘制的标签,以得到标签数组;遍历所述标签数组;对所述标签组内的每个标签,获取当前标签的世界空间位置;获取当前标签的屏幕空间位置;计算当前标签在屏幕空间的包围盒;利用所述Rbush树实例对象确定与当前标签的包围盒相交的屏幕空间包围盒数组;根据所述屏幕空间包围盒数组判断当前标签的屏幕空间位置是否存在包围盒;若当前标签的屏幕空间位置不存在包围盒,则将当前标签对应的包围盒存入Rbush树内,并将当前标签的标签信息存入到Map对象中;将当前标签加入至所述3D场景中,在所述3D场景中绘制当前标签。2.根据权利要求1所述的屏幕空间标签碰撞检测方法,其特征在于,所述利用所述Rbush树实例对象判断当前标签的屏幕空间位置是否存在包围盒之后,还包括:若当前标签的屏幕空间位置存在包围盒,则遍历与当前标签的包围盒相交的屏幕空间包围盒数组,并采用Map对象结合所述屏幕空间包围盒数组对当前标签的包围盒进行相交检测;当所述屏幕空间包围盒数组中没有一个包围盒与当前标签的包围盒相交,则执行所述将当前标签对应的包围盒存入Rbush树内;当所述屏幕空间包围盒数组中有至少一个包围盒与当前标签的包围盒相交,则停止遍历与当前标签的包围盒相交的屏幕空间包围盒数组,并隐藏当前标签。3.根据权利要求1所述的屏幕空间标签碰撞检测方法,其特征在于,所述获取需要在所述3D场景中绘制的标签,以得到标签数组,包括:获取需要在3D场景中绘制的标签信息;将所述标签信息存于数组中,以得到标签数组。4.根据权利要求1所述的屏幕空间标签碰撞检测方法,其特征在于,当前标签在屏幕空间的包围盒包括当前标签的宽高以及当前标签在屏幕空间内的位置信息。5.根据权利要求1所述的屏幕空间标签碰撞检测方法,其特征在于,所述根据所述屏幕空间包围盒数组判断当前标签的屏幕空间位置是否存在包围盒,包括:确定与所述包围盒相交的屏幕空间包围盒数组的长度,以得到数组长度;根据所述数组长度判断所述当前标签的屏幕空间内是否有其他标签;若所述当前标签的屏幕空间内没有其他标签,则确定所述当前标签的屏幕空间位置没有存在包围盒;若所述当前标签的屏幕空间内有其他标签,则确定所述当前标签的屏幕空间位置存在包围盒。6.根据权利要求2所述的屏幕空间标签碰撞检测方法,其特征在于,所述遍历与当前标签的包围盒相交的屏幕空间包围盒数组,并采用Map对象结合所述屏幕空间包围盒数组对当前标签的包围盒进行相交检测,包括:
遍历与当前标签的包围盒相交的屏幕空间包围盒数组;对于与当前标签的包围盒...

【专利技术属性】
技术研发人员:柳遵梁李云飞闻建霞谷军年刘俊杰朱琴琴李景飞
申请(专利权)人:杭州美创科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1