1.一种三维超大场景的细分切割加载方法,其特征在于,包括以下步骤:
s1:将三维场景矢量空间化,三维场景由坐标系由right、up、target三个互相垂直的向量组成,世界场景中的某一点都可由这三个矢量确定;在三维空间中计算三维场景的边界矢量信息,获得最大化边界信息数据进行矢量空间转换为0-1矢量,并将其矢量信息进行空间的切割与划分;需要对完整的场景空间根据矢量信息划分为若干layer;
s1a:进行三维场景的矢量空间转换;
s1b:获得每个计算子矢量空间的边界信息;
s1c:将子矢量空间转换为layer进行存储;
s2:三维场景模型数据空间矢量细分化后,通过建立范围layer进行子空间的划分,layer由l、t、r和b的4个三维空间矢量组成,此矩形范围为切割后的子空间的边界范围,且每个切割矩形都不相交,将非结构化数据提取为关键索引的结构化数据,并利用b+树对结构化关键索引值的信息进行存储;
s2a:layer空间计算,通过bound边界信息框来存储layer空间位置信息,并计算边界中心点为centerpoint;
s2b:提取layer关键索引信息作为layer关键id值,便于检索和计算;
s2c:通过边界相交计算方法来保证每个layer的边界唯一性,如果存在相交边界需要对新加入的边界进行修正计算;
s2d:引入distance变量来决定每个layer的是否可加载性;
s2e:为每个layer中的模型加入lod层级数据信息,来优化可见性的消隐剔除性能;
s2f:为以上信息建立layer结构化数据以关键值id为索引进行b+树存储;
s3:对三维视角进行偏特化输出为中枢点,偏特化方法为先指定当前观察点位置,根据观察点的视角范围fov及视角距离的远近面,对所有划分后的子矩形进行求交运算,此中枢点为整个矢量空间的中心点,根据此中心点与结构化的模型数据进行距离空间计算;
s3a:三维视角矩阵信息提取,提取观察点视角位置数据(x,y,z);
s3b:由视角范围fov及视角距离的远近面用于获取视锥透视平面信息;
s3c:通过方法2获得需要进行进行的所有layer,对于所有layer进行求交计算获得可见layer集合;
s3d:通过上一步方法获得当前可见的所有layer集合,对此集合进行遍历计算获得其centerpoint与当前视角进行距离计算,通过距离计算获得变量td与layer中的distance变量计算差值;
s3e:通过差值计算用于进一步在layer集合中剔除那些不可见部分;
s3f:差值计算的比值用于获取layer中的lod信息,取决于装载当前layer中的哪一部分lod模型;
s4:将偏特化后计算结果进行索引关系集合的建立,索引关系为中枢点所对应的可载入的模型集合,索引关系为键值对数据结构,其中k中枢点,v数据集合,当观察点发生改变后的中枢点数据索引会进行动态更新,可由索引关系快速获取需要加载的模型集合;因其k值为非线性连续值,若直接存储k值则会导致系统极大的开销,需要对k值进行快速索引的划分;
s4a:当视角发生改变时,重复方法3获得的集合存入待装载的kv数据结构中;
s4b:其中v为待装载待装载的所有layer集合以及其lod模型集合索引值,k值当前当前视角中枢点数据索引;
s4c:由当前视角位置信息,通过方法1获得子矢量空间的位置信息,因为当前视角必定会落在某个子矢量空间中,利用其特性获取唯一的k值信息等于子矢量空间唯一id;
s4d:通过哈希表hashmap数据结构用于存储信息,便于视角改变后的快速layer索引;
s4e:将模型集合加入多线程池进行模型数据加载;
s4f:根据计算机内核数,建立相同线程数的线程池方法;
s4g:通过该线程池引入异步机制asycwork用于异步装载方法4获得的layer中lod所对于的模型数据。