首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种计及Web端快速渲染的倾斜摄影空间索引构建方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:长江空间信息技术工程有限公司(武汉)

摘要:本发明公开了一种计及Web端快速渲染的倾斜摄影空间索引构建方法。它包括如下步骤,步骤一:对实景三维模型内部结构的优化,简化模型内部数据结构;对实景三维模型内部结构的优化包括对模型内部纹理图像的优化、几何体合并;步骤二:将实景三维的顶层瓦片模型转换为点云模型,提升实景三维顶层数据的加载速度;步骤三:对实景三维模型空间索引的优化,构建高效的空间索引,获取新倾斜摄影三维模型。本发明克服了现有Web三维数据加载及解析速度慢的缺陷;具有提升实景三维的顶层瓦片加载速度,缩短三维渲染引擎解析实景三维模型数据结构时耗时,提升三维场景加载速度,提升三维WebGL渲染的用户体验感的优点。

主权项:1.一种计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:包括如下步骤,步骤一:对实景三维模型内部结构的优化,简化模型内部数据结构;对实景三维模型内部结构的优化包括对模型内部纹理图像的优化、几何体合并;将合并后的纹理图像与几何体存储到实景三维模型文件中;步骤二:将实景三维的顶层瓦片模型转换为点云模型,提升实景三维顶层数据的加载速度;步骤三:对实景三维模型空间索引的优化,构建高效的空间索引,获取新倾斜摄影三维模型;在步骤一中,实景三维模型内部纹理图像的优化,包括对纹理图像的读取并压缩、将实景三维模型内部所有的纹理图像压缩并合并到一张纹理中,包括以下子步骤:步骤1.1.1:纹理图像的读取并压缩,创建图像合并结构体tagMergeImage;步骤1.1.2:实景三维模型内多张纹理图像合并到一张纹理中;所述图像合并结构体tagMergeImage包括图像缓存区ImageBuffer,图像的宽度ImageWidth,图像的高度ImageHeight,图像合并后的偏移量ImageOffset,偏移量中包含X方向起始位置x_start,Y方向起始位置y_start,X方向长度x_range,Y方向长度y_range;针对图像合并结构体tagMergeImage,创建图像合并容器vecMergeImage,包括以下子步骤:步骤1.1.1.1:纹理图像的读取,使用OpenSceneGraph图形库,获取模型内部的所有纹理图像;步骤1.1.1.2:纹理图像的压缩并压入图像合并容器中,使用开源库FreeImage,将获取到的纹理图像转换为JPEG格式的图像,获取图像的宽度与高度;创建图像合并结构体对象,将转换为JPEG格式的图像存入该对象中的ImageBuffer中,将图像的宽度与高度赋值给该对象的ImageWidth与ImageHeight;在步骤1.1.2中,实景三维模型内多张纹理图像合并到一张纹理中的方法,包括图像合并容器中图像排序,获取目标图像大小,采用插入分裂法插入图像,计算容器中图像插入到目标图像中的偏移量,重新计算合并后图像的宽度与高度,将容器中图像按照偏移量保存目标图像中,重新计算容器中每个图片的偏移量;采用插入分裂法插入图像,具体的插入流程,包括以下步骤:步骤1.1.2.3.1:依次从排序后的图像合并容器vecMergeImage中提取纹理图像curImageWidth,curImageHeight;步骤1.1.2.3.2:计算纹理图像插入到目标图像中的偏移量,当纹理图像插入第nLevel层的第一张纹理图像时,其中nLevel取值从0开始的整数,将待插入的纹理图像插入到第nLevel层的左上角,因此待插入的纹理图像的偏移量为0,LevelHeight*nLevel,curImageWidth,curImageHeight,将待插入的纹理图像偏移量赋值给该纹理图像对象的偏移量中;由于纹理图像的插入,该第nLevel层被分割为两块,一块是刚插入的纹理图像的右侧区域curImageWidth,LevelHeight*nLevel,max_width-curImageWidth,LevelHeight,另一块是刚插入的纹理图像的下侧区域0,LevelHeight*nLevel+curImageHeight,curImageWidth,LevelHeight-curImageHeight,将这两块按照空闲宽度的升序插入vecFreePlace容器中;步骤1.1.2.3.3:插入第二张纹理图像的时候,根据当前图像的宽度curImageWidth与高度curImageHeight,与空闲容器vecFreePlace中各节点x_start_free,y_start_free,free_width,free_height进行逐个判断,当curImageWidth=free_width并且curImageHeight=free_height时候,则将第二张待插入的纹理图像插入到满足条件的空闲区域中,第二张待插入的纹理图像的偏移量计算方法为x_start_free,y_start_free,curImageWidth,curImageHeight,并将该空闲区域分裂为两块,分别为:右侧一块x_start_free+curImageWidth,y_start_free,free_width-curImageWidth,free_height,下侧一块x_start_free,y_start_free+curImageHeight,curImageWidth,free_height-curImageHeight,将该空闲区域从空闲容器中删除,并将分裂得到的两块按照宽度升序插入空闲容器vecFreePlace中;当进行curImageWidth=free_width并且curImageHeight=free_height判断的时候,没有在容器中找到空闲区域,则将该第二张待插入的纹理图像插入到下一层,nLevel=nLevel+1,进入步骤1.1.2.3.2;步骤1.1.2.3.4:重新计算合并后图像的宽度newImageWidth与高度newImageHeight,通过步骤1.1.2.3.3得到每个纹理图像在合并后图像的偏移量,宽度newImageWidth的计算方法为从图像合并容器中取偏移量x_start+x_range最大值,高度newImageHeight的计算方法为从图像合并容器中取偏移量y_start+y_range最大值;步骤1.1.2.3.5:将空闲容器中的纹理图像按照偏移量保存目标图像中,包括创建目标图像、将图像合并容器中图像插入到目标图像中和保存目标图像;步骤1.1.2.3.6:重新计算图片容器中每个图片的偏移量,图像合并容器中图像的偏移值x_start、y_start、x_range与y_range相对于整张图的比例,计算公式为:x_start=x_start*1.0ewImageWidth,y_start=y_start*1.0ewImageHeight,x_range=x_range*1.0ewImageWidth,y_range=y_range*1.0ewImageHeight;在步骤1.1.2.3.5中,将空闲容器中的纹理图像按照偏移量保存在目标图像中,具体方法,包括以下步骤:步骤1.1.2.3.5.1:创建目标图像,使用FreeImage开源库,创建一张宽度为newImageWidth、高度为newImageHeight,格式为JPEG的目标图像;步骤1.1.2.3.5.2:将图像合并容器中的纹理图像插入到目标图像中,从图像合并容器vecMergeImage中逐个提取纹理图像对象,使用FreeImage开源库加载纹理图像,针对纹理图像的ImageWidth与ImageHeigth,创建两层循环,两层循环分别为:从图像的左到右、从上到下,提取纹理图像中每个坐标x,y的像素,在目标图像中坐标x,y对应的坐标为x_start+x,y_start+y,将提取到的像素,赋值到目标图像对应的坐标中;步骤1.1.2.3.5.3:将新得到的纹理图像保存到内存缓存区中;在步骤一中,几何体合并,为将实景三维模型内部所有几何体合并到一个几何体中;几何体内部包括顶点集合、纹理坐标集合、法线集合、顶点索引集合;几何体合并的具体方法为:创建顶点内存缓存区、顶点索引内存缓存区、纹理坐标内存缓存区,遍历实景三维模型内部几何体,将几何体中顶点集合存入顶点内存缓存区,将顶点索引集合存入顶点索引内存缓存区,将纹理坐标集合存入纹理坐标内存缓存区,创建一个变量nPrePositionNum,用于记录之前处理几何体的顶点数,默认值为0;在步骤二中,将实景三维的顶层瓦片模型转换为点云模型,包括以下子步骤:步骤2.1:创建顶点内存缓存区;步骤2.2:创建颜色内存缓存区,从实景三维模型的几何体中获取纹理坐标集合,提取每个纹理坐标,找到与几何体关联的纹理图像,使用OpenSceneGraph图形库中接口,获取纹理坐标所在纹理图像中的颜色,将该颜色存入颜色内存缓存区中;步骤2.3:将顶点内存缓存区、颜色内存缓存区、空间量化参数,按照点云模型的格式,写入文件中;在步骤2.1中,创建顶点内存缓存区,包括以下子步骤:步骤2.1.1:提取模型包围盒,使用OpenSceneGraph图形库,获取模型的包围盒x_min,y_min,z_min,x_max,y_max,z_max;步骤2.1.2:对顶点集合进行空间量化处理,将原本顶点x,y,z使用类型float*3=12个字节,转变为使用类型为short*3=6个字节,使模型的大小减少了一半,提升网络传输速度,降低了GPU的使用率,进行空间量化处理;在步骤2.1.2中,对顶点集合进行空间量化处理,包含以下子步骤:步骤2.1.2.1:计算缩放比例,将模型的包围盒进行65536等分,计算三个方向的缩放比例ScaleX,ScaleY,ScaleZ,计算公式为:ScaleX=x_max-x_min65536,ScaleY=y_max-y_min65536,ScaleZ=z_max-z_min65536;步骤2.1.2.2:遍历几何体中顶点集合,提取每个顶点x,y,z,对顶点的空间量化公式为x_new=x-x_start*ScaleX,y_new=y-y_start*ScaleY,z_new=z-z_start*ScaleZ,将x_new,y_new,z_new存入顶点内存缓存区中;在步骤三中,实景三维模型空间索引中以JSON的数据格式包含整个三维模型的信息和模型空间索引中模型之间的数据结构信息,对实景三维模型空间索引的优化的方法为:步骤3.1:整个三维模型的信息,包括三维模型的偏移矩阵、可视距、坐标系类型和三维模型的偏移矩阵,包括以下子步骤:步骤3.1.1:三维模型的偏移矩阵,是通过将三维模型的零点坐标进行上球之后,所得到的一个偏移矩阵,通过这个偏移矩阵,将整个三维模型移到球面上去;步骤3.1.2:三维模型的坐标系类型,是标识整个三维模型内部坐标系是以Y轴向上还是以Z轴向上,默认是Y轴向上;步骤3.2:实景三维模型空间索引中模型之间的数据结构信息,包括模型的相对路径、可视距、包围盒,以及模型与模型之间的层级关系,模型与下一层空间索引的层级关系;步骤3.3:实景三维模型空间索引分为模型数据顶层空间索引和模型数据精细层空间索引两部分,包括以下子步骤:步骤3.3.1:模型数据顶层空间索引,其内部包含了模型金字塔前几层模型的空间索引;具体提取方法包括以下子步骤:步骤3.3.1.1:设定模型数据顶层空间索引的最大层级nMaxTopLevel,数据在转换的时候,根据不同三维模型数据可以设定不同的值,默认值是5层;步骤3.3.1.2:创建模型数据空间索引中每个节点的结构体tagNodeIndex,其内部包含模型的相对路径strRelativePath、模型的可视距dGeometricError、包围盒box、子空间索引节点容器vecChildren;步骤3.3.1.3:创建模型数据空间索引节点,该空间索引节点与模型金字塔中节点一一对应,从模型金字塔的顶层开始,逐层往下,采用的递归的方式,遍历模型金字塔,计算提取模型的层级是否小于nMaxTopLevel;如果小于则进入步骤3.3.1.4,如果大于则进入步骤3.3.1.5;步骤3.3.1.4:创建模型数据空间索引节点对象nodeIndex,通过步骤3.3.1.3提取模型的包围盒、模型的相对路径、模型的可视距,赋值给nodeIndex;如果提取的模型为模型金字塔的根节点,则nodeIndex为模型数据空间索引的根节点,如果提取的模型不是模型金字塔的根节点,则将nodeIndex导入其父节点中的子空间索引节点容器中;步骤3.3.1.5:当前提取模型的层级已经等于模型数据顶层空间索引的最大层级nMaxTopLevel,设定提取到的模型为精细层中一条分支的根节点,创建一个与提取到模型的名称相同后缀名不同的模型数据精细层空间索引名称,并将该模型数据精细层空间索引的相对路径导入其父节点中子空间索引节点容器中,及顶层空间索引的nMaxTopLevel是精细层空间索引的相对路径;步骤3.3.2:模型数据精细层空间索引,其内部包含了模型金字塔中nMaxTopLevel层及以后层级的一条子分支的所有模型;通过步骤3.3.1.5,我们已经提取到一条分支中精细层模型根节点,具体提取精细层下所有节点包含以下子步骤:步骤3.3.2.1:从精细层模型根节点开始,采用递归的方式,遍历精细层模型根节点下所有子节点;步骤3.3.2.2:针对每个提取模型节点,创建一个对应的空间索引节点对象,获取模型的包围盒、模型的相对路径、模型的可视距,赋值给与模型对应的空间索引节点对象,如果提取的模型节点为精细层根节点,则与之对应的空间索引节点对象为模型数据空间索引根节点,如果提取的模型节点不是精细层根节点,则将与模型对应的空间索引节点对象导入其父节点中子空间索引节点容器中;步骤3.3.3:模型数据顶层空间索引与模型数据精细层,按照空间索引的格式写入文件中。

全文数据:

权利要求:

百度查询: 长江空间信息技术工程有限公司(武汉) 一种计及Web端快速渲染的倾斜摄影空间索引构建方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。