System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据处理领域,具体而言,涉及一种体素块检测方法、装置、电子设备及存储介质。
技术介绍
1、射线检测一直是计算机图形学、游戏开发和虚拟现实等领域的关键挑战之一。确定一条射线与三维场景中的物体或连续体素的交点需要高效的算法,在体素游戏(minecraft)中由于存在着大量的方块化元素,其数量级比之一般的三维游戏还要更高,且需要区分每一独立的体素存在,在这个背景下一个良好的射线检测算法更是及其重要。
2、现有技术的技术方案是通过八叉树下的轴对齐包围盒(aabb)进行射线检测。射线检测过程通常从根节点开始,逐级遍历八叉树,以确定射线是否与每个节点的包围盒相交。如果射线与包围盒相交,进一步检测该节点下的子节点。这个过程可以通过递归或迭代来实现。如果一个节点的包围盒与射线相交,但该节点还有子节点,则递归搜索这些子节点。
3、八叉树的构建和维护是一个相对复杂的过程。每当场景中的物体发生变化时,树结构必须进行更新,更新则需要相当大的计算开销。对于动态场景或需要实时更新的应用程序,则会成为性能瓶颈。
技术实现思路
1、本专利技术的目的在于提供一种体素块检测方法、装置、电子设备及存储介质,能够提高确定射线穿过的连续体素块,从而减少了计算开销。
2、为了实现上述目的,本申请实施例采用的技术方案如下:
3、第一方面,本申请实施例提供了一种体素块检测方法,所述方法包括:
4、在体素空间中构建高度场数据结构;
5、将所述高度
6、将目标射线传入所述体素空间;
7、基于所述目标射线,确定步进方向;
8、将所述目标射线的起点作为起始点,基于所述步进方向进行步进,并确定步进后的所述目标射线中的终止点;
9、确定所述起始点与所述终止点构成的射线线段是否穿过任一所述竖直连续体素块;
10、若是,则将穿过的竖直连续体素块作为目标体素块。
11、在可选的实施方式中,所述基于所述目标射线,确定步进方向的步骤,包括:
12、确定所述目标射线的x方向的分量与y方向的分量;
13、从所述x方向的分量与所述y方向的分量中确定较小的分量作为目标分量;
14、确定所述目标分量的方向,作为步进方向。
15、在可选的实施方式中,将所述目标射线的起点作为起始点,基于所述步进方向进行步进,并确定步进后的所述目标射线中的终止点的步骤,包括:
16、确定所述目标射线的x方向的分量的第一绝对值与y方向的分量的第二绝对值;
17、从所述第一绝对值和所述第二绝对值中确定较大的目标绝对值;
18、计算所述目标射线的x方向的分量与所述目标绝对值的比值作为x方向的第一步进量;
19、计算所述目标射线的y方向的分量与所述目标绝对值的比值作为y方向的第二步进量;
20、计算所述目标射线的z方向的分量与所述目标绝对值得比值作为z方向的第三步进量;
21、基于所述第一步进量、第二步进量以及第三步进量,确定步进后的所述目标射线中的终止点。
22、在可选的实施方式中,所述方法还包括:
23、确定各所述竖直连续体素块的第一高度范围;
24、所述确定所述起始点与所述终止点构成的射线线段是否穿过任一所述竖直连续体素块的步骤,包括:
25、确定所述起始点与所述终止点构成的射线线段的z方向的第二高度范围;
26、判断所述第一高度范围和所述高度范围,确定所述射线线段是否穿过任一所述竖直连续体素块。
27、在可选的实施方式中,所述第一高度范围包括高度上限和高度下限,所述第二高度范围包括高点高度和低点高度,所述判断所述第一高度范围和所述高度范围,确定所述射线线段是否穿过任一所述竖直连续体素块步骤,包括:
28、判断所述高点高度是否大于所述高度下限;
29、在所述高点高度大于所述高度下限的情况下,判断所述低点高度是否小于所述高度上限;
30、在所述低点高度小于所述高度上限的情况下,确定所述射线线段穿过任一所述竖直连续体素块。
31、在可选的实施方式中,所述方法还包括:
32、在所述高点高度小于所述高度上限的情况下,或者在所述低点高度大于所述高度上限的情况下,将所述终止点作为新的起始点;
33、返回基于所述步进方向进行步进,并确定步进后的所述目标射线中的终止点的步骤至确定所述起始点与所述终止点构成的射线线段是否穿过任一所述竖直连续体素块的步骤,直至遍历完所有竖直连续体素块为止。
34、在可选的实施方式中,所述方法还包括:
35、基于所述目标体素块构建体素场景。
36、第二方面,本申请实施例提供了一种体素块检测装置,所述装置包括:
37、构建模块,用于在体素空间中构建高度场数据结构;
38、分割模块,用于将所述高度场数据结构分隔为多个竖直连续体素块;
39、确定模块,用于将目标射线传入所述体素空间;基于所述目标射线,确定步进方向;将所述目标射线的起点作为起始点,基于所述步进方向进行步进,并确定步进后的所述目标射线中的终止点;确定所述起始点与所述终止点构成的射线线段是否穿过任一所述竖直连续体素块;若是,则将穿过的竖直连续体素块作为目标体素块。
40、第三方面,本申请实施例提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现所述体素块检测方法的步骤。
41、第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述体素块检测方法的步骤。
42、本申请具有以下有益效果:
43、本申请通过在体素空间中构建高度场数据结构,将高度场数据结构分割为多个竖直连续体素块,将目标射线传入体素空间,基于目标射线,确定步进方向,将目标射线的起点作为起始点,基于步进方向进行步进,并确定步进后的目标射线中的终止点,确定起始点与终止点构成的射线线段是否穿过任一竖直连续体素块,若是,则将穿过的竖直连续体素块作为目标体素块。能够以较为高效的方式计算射线穿过的连续体素块。通过在离散步长内进行检测,从而减少了计算开销。
本文档来自技高网...【技术保护点】
1.一种体素块检测方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述基于所述目标射线,确定步进方向的步骤,包括:
3.根据权利要求2所述的方法,其特征在于,将所述目标射线的起点作为起始点,基于所述步进方向进行步进,并确定步进后的所述目标射线中的终止点的步骤,包括:
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,所述第一高度范围包括高度上限和高度下限,所述第二高度范围包括高点高度和低点高度,所述判断所述第一高度范围和所述高度范围,确定所述射线线段是否穿过任一所述竖直连续体素块步骤,包括:
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
8.一种体素块检测装置,其特征在于,所述装置包括:
9.一种电子设备,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-7任一项所述
10.一种可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1-7中任一项所述方法的步骤。
...【技术特征摘要】
1.一种体素块检测方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述基于所述目标射线,确定步进方向的步骤,包括:
3.根据权利要求2所述的方法,其特征在于,将所述目标射线的起点作为起始点,基于所述步进方向进行步进,并确定步进后的所述目标射线中的终止点的步骤,包括:
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,所述第一高度范围包括高度上限和高度下限,所述第二高度范围包括高点高度和低点高度,所述判断所述第一高度范围和所述高度范围,确定所述...
【专利技术属性】
技术研发人员:蒋恒,
申请(专利权)人:北京像素软件科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。