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

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

Info

Publication number
CN115330933A
CN115330933A CN202210906832.4A CN202210906832A CN115330933A CN 115330933 A CN115330933 A CN 115330933A CN 202210906832 A CN202210906832 A CN 202210906832A CN 115330933 A CN115330933 A CN 115330933A
Authority
CN
China
Prior art keywords
model
image
texture
spatial index
dimensional
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202210906832.4A
Other languages
English (en)
Other versions
CN115330933B (zh
Inventor
祝刚
张力
马瑞
张航
邱鑫
刘成堃
郭雯
吴学宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Changjiang Spatial Information Technology Engineering Co ltd
Original Assignee
Changjiang Spatial Information Technology Engineering Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Changjiang Spatial Information Technology Engineering Co ltd filed Critical Changjiang Spatial Information Technology Engineering Co ltd
Priority to CN202210906832.4A priority Critical patent/CN115330933B/zh
Priority claimed from CN202210906832.4A external-priority patent/CN115330933B/zh
Publication of CN115330933A publication Critical patent/CN115330933A/zh
Application granted granted Critical
Publication of CN115330933B publication Critical patent/CN115330933B/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/51Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/53Querying
    • G06F16/538Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02TCLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO TRANSPORTATION
    • Y02T10/00Road transport of goods or passengers
    • Y02T10/10Internal combustion engine [ICE] based vehicles
    • Y02T10/40Engine management systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Architecture (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)

Abstract

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

Description

一种计及Web端快速渲染的倾斜摄影空间索引构建方法
技术领域
本发明涉及实景三维技术领域,更具体地说它是一种计及Web端快速渲染的倾斜摄影空间索引构建方法。
背景技术
倾斜摄影技术是国际测绘领域近些年发展起来的一项高新技术,它颠覆了以往正射影像只能从垂直角度拍摄的局限,通过在同一飞行平台上搭载多台传感器,同时从一个垂直、四个倾斜等五个不同的角度采集影像,将用户带入更符合人眼视觉的真实立体世界。
随着倾斜摄影技术的快速发展,以及贴近摄影测量的深度应用,采集的实景三维模型越来越精细,范围越来越开阔。但经过相关预处理程序的顶层模型合并后,得到的三维模型内部数据结构杂乱。三维渲染引擎解析此类实景三维模型数据结构时,存在耗时长的问题,导致三维场景加载速度慢,用户体验感差。
在B/S端三维应用中,三维模型数据需要预先经过网络传输,然后再解析与可视化。对于海量、精细的倾斜数据,在B/S应用环境下,则会进一步放大数据延迟、卡顿、交互响应体验差等问题。造成这些问题的关键症结主要在于以下两个方面:
(1)实景三维的顶层瓦片模型加载缓慢。三维WebGL引擎从金字塔顶层开始加载实景三维数据,当窗口来回切换、比例尺频繁缩放时,需要释放窗口中之前的模型,重新从金字塔顶层开始重新计算层级并加载模型,从而影响整体三维场景的加载;
(2)实景三维的瓦片层级关系解析复杂。以主流的倾斜数据格式OSGB为例,瓦片层级关系存储在实景三维模型内部LOD中,需要将所有模型解析之后,才能构建模型金字塔,而对于海量实景三维数据,模型文件多,进一步影响了模型索引解析的速度。
因此,开发一种能提升实景三维的顶层瓦片模型加载速度、且能提升模型索引解析实景三维模型数据结构的速度的倾斜摄影模型空间索引构建与渲染方法很有必要。
发明内容
本发明的目的是为了提供一种计及Web端快速渲染的倾斜摄影空间索引构建方法,针对实景三维数据的模型结构优化,提升实景三维的顶层瓦片加载速度,将三维模型与索引分离,构建更便于解析的高效空间索引,缩短三维渲染引擎解析实景三维模型数据结构时耗时,提升三维场景加载速度,提升三维WebGL渲染的用户体验感;解决Web三维数据加载及解析速度慢的问题。
为了实现上述目的,本发明的技术方案为:一种计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:包括如下步骤,
步骤一:对实景三维模型内部结构的优化,简化模型内部数据结构;
对实景三维模型内部结构的优化包括对模型内部纹理图像的优化、几何体合并;将合并后的纹理图像与几何体存储到实景三维模型文件中;经过相关预处理程序的顶层模型合并后,本发明将原本半径小、数量多的金字塔瓦片模型,重构为半径大、数量大的新金字塔瓦片模型,但是顶层瓦片模型内部有成百上千个几何体和与几何体关联的纹理图像,WebGL引擎解析这些模型压力大、耗时长;现将瓦片模型内部所有几何体合并到一个几何体中,将与几何体关联的多张纹理图像进行压缩并合并为一张纹理图像中,WebGL引擎解析模型速度快,同时占用资源小,从而提升三维模型的加载速度;
步骤二:将实景三维的顶层瓦片模型转换为点云模型,提升实景三维顶层数据的加载速度;
点云模型中只有顶点序列和与每个顶点对应的颜色序列,没有几何体与纹理,因此点云模型的加载速度要比三维模型的速度快的多;因为模型金字塔前几层模型范围大、三角面片多、纹理图像模糊,进行远距离查看场景的时候,在窗口中只需要展示整个场景的轮廓,所以转换为点云模型并不会影响场景的精度,但是可以很大程度的提升三维模型的加载,当窗口进行来回切换的时候,频繁调用模型金字塔前几层模型,渲染引擎也能够快速的响应,从而提升三维模型的加载速度;
步骤三:对实景三维模型空间索引的优化,构建高效的空间索引,获取新倾斜摄影三维模型;
本发明将模型与索引分离,提升对模型信息的快速解析;将模型空间索引分为两部分:模型顶层空间索引与模型精细层空间索引;模型顶层空间索引包含了模型金字塔的前几层模型数据,其内部数据量少,结构简单,WebGL引擎能够快速的解析,顶层空间索引加载之后,会一直缓存在WebGL引擎中,避免了窗口在进行来回切换的时候频繁调用所造成的资源浪费;模型精细层空间索引中只包含了模型金字塔中一个分支之后的所有模型信息,其内部模型数量不多,当窗口定位到精细层级的时候,WebGL引擎只需要加载并解析该精细层空间索引,获取模型信息,而不需要解析不在窗口中的空间索引,减少数据冗余,提升了空间索引的解析速度,从而提升整个三维模型的加载速度。
在上述技术方案中,在步骤一中,实景三维模型内部纹理图像的优化,包括对纹理图像的读取并压缩、将实景三维模型内部所有的纹理图像压缩并合并到一张纹理中,包括以子步骤:
步骤1.1.1:纹理图像的读取并压缩,创建图像合并结构体tagMergeImage;
步骤1.1.2:实景三维模型内多张纹理图像合并到一张纹理中。
在上述技术方案中,图像合并结构体tagMergeImage包括图像缓存区ImageBuffer,图像的宽度ImageWidth,图像的高度ImageHeight,图像合并后的偏移量ImageOffset,偏移量中包含X方向起始位置x_start,Y方向起始位置y_start,X方向长度x_rangle,Y方向长度y_rangle;针对图像合并结构体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得到每个纹理图像在合并后图像的偏移量,宽度(newImageHeight)的计算方法为从图像合并容器中取偏移量x_start+x_rangle最大值,高度(newImageHeight)的计算方法为从图像合并容器中取偏移量y_start+y_rangle最大值;
步骤1.1.2.3.5:将空闲容器中的纹理图像按照偏移量保存目标图像中,包括创建目标图像、将图像合并容器中图像插入到目标图像中和保存目标图像;。
步骤1.1.2.3.6:重新计算图片容器中每个图片的偏移量,图像合并容器中图像的偏移值x_start、y_start、x_rangle与y_rangle相对于整张图的比例,计算公式为:x_start=x_start*1.0/newImageWidth,y_start=y_start*1.0/newImageHeight,x_rangle=x_rangle*1.0/newImageWidth,y_rangle=y_rangle*1.0/newImageHeight。
在上述技术方案中,在步骤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_min)/65536,ScaleY=(y_max-y_min)/65536,ScaleZ=(z_max-z_min)/65536;
步骤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:模型数据顶层空间索引与模型数据精细层,按照空间索引的格式写入文件中。
上述*表示数学符号乘号。
与现有技术相比,本发明具有以下优点:
(1)通过高效的空间索引,WebGL引擎能够快速获取模型信息,通过优化模型内部结构,WebGL引擎能够快速的解析模型,减少了数据的冗余,提升了实景三维数据的加载速度;
(2)将实景三维的顶层瓦片转换为点云,进一步提升实景三维顶层数据的加载速度(本发明第一次加载并显示整个场景大约耗时5秒,窗口进行来回切换的时候,加载并显示窗口中场景大约耗时5秒,加载速度快;克服了现有技术加载速度慢的缺陷(现有技术第一次加载并显示场景大约耗时2分钟,当倾斜摄影瓦片半径小且数量多的时候,耗时会更长,窗口进行来回切换的时候,加载并显示窗口中场景大约耗时30秒);当三维浏览窗口进行来回切换的时候,实景三维顶层数据模型可快速响应,从而提升大范围实景三维交互的体验感。
本发明适用于一切范围的倾斜,尤其适用于大范围的倾斜;对于范围越大且瓦片数量越多的倾斜摄影,本发明加载的效果越明显(即当倾斜摄影的范围越大且瓦片数量越多,本发明的加载速度快的优势越明显、且明显优于现有技术的加载速度)。
附图说明
图1为本发明的倾斜摄影转换流程图。
图2为本发明中的优化模型内部数据结构算法流程图。
图3为本发明中的纹理图像合并过程中数据流程图。
图4为本发明中的纹理图像合并过程中算法流程图。
图5为本发明中的模型转换为点云模型算法流程图。
图6为本发明中的模型空间索引数据结构图。
图7为本发明中的模型顶层空间索引与精细层空间索引的数据结构图。
具体实施方式
下面结合附图详细说明本发明的实施情况,但它们并不构成对本发明的限定,仅作举例而已。同时通过说明使本发明的优点更加清楚和容易理解。
如图1所示,一种计及Web端快速渲染的倾斜摄影空间索引构建方法,包括如下步骤:
步骤1:对模型内部结构的优化,简化模型内部数据结构,算法如图2所示;主要包括对模型内部纹理图像的优化、几何体合并,包括以下子步骤:
步骤1.1:模型内部纹理图像的优化,包括对纹理图像的读取并压缩、将模型内部所有的纹理图像压缩并合并到一张纹理中,包括以下子步骤:
步骤1.1.1:纹理图像的读取并压缩,创建图像合并结构体tagMergeImage,主要包括图像缓存区ImageBuffer,图像的宽度ImageWidth,图像的高度ImageHeight,图像合并后的偏移量ImageOffset,偏移量中包含X方向起始位置x_start,Y方向起始位置y_start,X方向长度x_rangle,Y方向长度y_rangle;针对该结构体,创建图像合并容器vecMergeImage;包括以下子步骤:
步骤1.1.1.1:纹理图像的读取,使用OpenSceneGraph图形库,获取模型内部的所有纹理图像;
步骤1.1.1.2:纹理图像的压缩并压入图像合并容器中,使用开源库FreeImage,将获取到的纹理图像转换为JPEG格式的图像,获取图像的宽度与高度;创建图像合并结构体对象,将转换为JPEG格式的图像存入该对象中的ImageBuffer中,将图像的宽度与高度赋值给该对象的ImageWidth与ImageHeight。
步骤1.1.2:模型内多张纹理图像合并到一张纹理中,主要包括图像合并容器中图像排序,获取目标图像大小,采用插入分裂法插入图像,计算容器中图像插入到目标图像中的偏移量,重新计算合并后图像的宽度与高度,将容器中图像按照偏移量保存目标图像中,重新计算容器中每个图片的偏移量;包括以下子步骤:
步骤1.1.2.1:图像合并容器中图像按照图像的宽度从大到小进行排序;
步骤1.1.2.2:获取目标图像的大小,设定图像的最大宽度(max_width)为10240,设定每层默认高度(LevelHeight)为512,提取容器中图像高度最大的值,与512进行比较,如果大于512,则LevelHeight为该图像的高度;
步骤1.1.2.3:采用插入分裂法插入图像,算法如图3所示,计算容器中图像插入到目标图像中的偏移量;创建空闲区域结构体tagFreePlace,主要包括X方向起始为x_start_free,Y方向起始位置为y_start_free,空闲宽度free_width,空闲高度free_height;创建空闲区域结构体容器vecFreePlace,该容器内部是按照空闲宽度,进行升序排列的;起始的时候空闲区域容器为空;具体的插入流程,包括以下子步骤:
步骤1.1.2.3.1:依次从排序后的图像合并容器vecMergeImage中提取纹理图像(curImageWidth,curImageHeight);
步骤1.1.2.3.2:计算图像插入到目标图像中的偏移量,图像插入过程中数据流程如图4所示,当图像插入第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,我们得到每个纹理图像在合并后图像的偏移量,宽度(newImageHeight)的计算方法为从图像合并容器中取偏移量x_start+x_rangle最大值,高度(newImageHeight)的计算方法为从图像合并容器中取偏移量y_start+y_rangle最大值;
步骤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:将新得到的纹理图像保存到内存缓存区中。
步骤1.1.2.3.6:重新计算图片容器中每个图片的偏移量,图像合并容器中图像的偏移值x_start、y_start、x_rangle与y_rangle相对于整张图的比例,计算公式为:
x_start=x_start*1.0/newImageWidth,
y_start=y_start*1.0/newImageHeight,
x_rangle=x_rangle*1.0/newImageWidth,
y_rangle=y_rangle*1.0/newImageHeight。
步骤1.2:模型内部所有几何体合并到一个几何体中,几何体内部包括顶点集合、纹理坐标集合、法线集合、顶点索引集合;为了减少光照对模型的影响,同时减少模型的文件大小,通常采用无光照的方式,因此在转换的时候不需要存储法线集合;创建顶点内存缓存区、顶点索引内存缓存区、纹理坐标内存缓存区,遍历模型内部几何体,将几何体中顶点集合存入顶点内存缓存区,将顶点索引集合存入顶点索引内存缓存区,将纹理坐标集合存入纹理坐标内存缓存区,创建一个变量nPrePositionNum,用于记录之前处理几何体的顶点数默认值为0,包含以下子步骤:
步骤1.2.1:几何体内部顶点索引合并,提取几何体内部顶点索引集合中每个索引,换算成新的索引值为nPrePositionNum+当前索引值,并将新的索引值存入顶点索引缓存区中;
步骤1.2.2:几何体内部顶点集合的合并,提取顶点集合中每个顶点,按顺序插入顶点内存缓存区中,同时nPrePositionNum=nPrePositionNum+当前几何体的顶点数;
步骤1.2.3:几何体内部纹理坐标的合并,通过当前几何体,获取与几何体关联的纹理图像,通过步骤1.1.1,获取该纹理图像在合并图像中的偏移量,遍历该几何体内的纹理坐标集合,提取每个点的纹理坐标(x,y),通过换算公式x_new=Offset.x_start+x*Offset.x_rangle,y_new=Offset.y_start+y*Offset.y_rangle,将(x_new,y_new)存入纹理坐标内存缓存区中;
步骤1.2.4:将顶点内存缓存区、顶点索引内存缓存区、纹理坐标内存缓存区按照几何体格式进行存储。
步骤1.3:将合并后的纹理图像与几何体存储到模型文件中。
步骤2:将实景三维的顶层瓦片模型转换为点云模型,提升实景三维顶层数据的加载速度;点云模型内部由顶点集合和每个顶点对应的颜色集合组成,没有几何体与纹理,加载速度比常规模块快的多,算法如图5所示,包括以下子步骤:
步骤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.1:计算缩放比例,将模型的包围盒进行65536等分,计算三个方向的缩放比例(ScaleX,ScaleY,ScaleZ),计算公式为ScaleX=(x_max-x_min)/65536,ScaleY=(y_max-y_min)/65536,ScaleZ=(z_max-z_min)/65536;
步骤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)存入顶点内存缓存区中。
步骤2.2:创建颜色内存缓存区,从模型的几何体中获取纹理坐标集合,提取每个纹理坐标,找到与几何体关联的纹理图像,使用OpenSceneGraph图形库中接口,获取纹理坐标所在纹理图像中的颜色,将该颜色存入颜色内存缓存区中;
步骤2.3:将顶点内存缓存区、颜色内存缓存区、空间量化参数,按照点云模型的格式,写入文件中。
步骤3:对模型空间索引的优化,构建高效的空间索引,空间索引中以JSON的数据格式包含了整个三维模型的信息和模型之间的数据结构信息,如图6所示,包括以下子步骤:
步骤3.1:整个三维模型的信息,主要包含三维模型的偏移矩阵、可视距、坐标系类型,包括以下子步骤:
步骤3.1.1:三维模型的偏移矩阵,是通过将三维模型的零点坐标进行上球之后,所得到的一个偏移矩阵,通过这个偏移矩阵,将整个三维模型移到球面上去。
步骤3.1.2:三维模型的坐标系类型,是标识整个三维模型内部坐标系是以Y轴向上还是以Z轴向上,默认是Y轴向上。
步骤3.2:模型空间索引中模型之间的数据结构信息;包含了模型的相对路径、可视距、包围盒,以及模型与模型之间的层级关系,模型与下一层空间索引的层级关系,如图7所示;
步骤3.3:模型空间索引分为两部分,模型数据顶层空间索引和模型数据精细层空间索引,数据结构如图7所示,包括以下子步骤:
步骤3.3.1:模型数据顶层空间索引,其内部包含了模型金字塔前几层的模型的信息;生成的空间索引文件大小比较小,内部结构简单,WebGL引擎能够快速的解析,从而能够快速的获取到模型之间的相关信息;WebGL引擎进行加载三维模型的时候,是从模型金字塔的顶层开始加载,通过模型的可视距定位到当前窗口需要渲染的模型层级,因此当最开始加载三维场景或者远距离查看三维场景的时候,WebGL引擎只需要解析顶层空间索引,提升了三维场景的加载速度;同时该索引只要加载了,就会缓存到内存中,避免了由于窗口视图进行来回切换的时候,进行多次请求、解析所造成资源的浪费;
步骤3.3.2:模型数据精细层空间索引,其内部包含了模型金字塔顶层中一个子分支之下的所有模型;该分支之下的模型数量不会很多,因此生成的精细层空间索引也不会很大,WebGL引擎解析能够快速的解析单个精细层空间索引;当窗口到精细层级之后,WebGL引擎只需要解析该窗口中精细层的空间索引,而不需要加载窗口之外的空间索引,避免了数据的冗余,提升了渲染引擎解析空间索引的速度,从而提升了整个三维场景的加载速度。
实施例
现以本发明试用于某倾斜摄影空间索引构建为实施例对本发明进行说明,对本发明应用于其他倾斜摄影空间索引构建方法同样具有指导作用。
本实施例中,倾斜摄影空间为200平方公里的倾斜,整个三维倾斜摄影模型总文件大小有109GB,其中原始顶层三维瓦片模型有8449个;当WebGL引擎直接进行加载整个三维倾斜摄影模型的全景时候,这些顶层三维瓦片模型是一个一个的进行加载,当整个三维场景全景加载完毕(实际只是加载所有三维瓦片模型金字塔的前一两层),需要耗时超过2分钟,当窗口视图进行来回切换的时候,又需要耗费差不多的时间进行加载,严重影响用户的体验感;为了解决这个问题,本实施例采用本发明方法经过相关预处理程序的顶层模型合并,将原始顶层三维瓦片模型8449个转换为顶层三维瓦片模型20个,现将经过预处理之后倾斜摄影模型进行转换(即构建计及Web端快速渲染的倾斜摄影空间索引的方法),包含以下子步骤:
步骤1:简化模型内部数据结构;经过相关预处理程序的顶层模型合并,将原始顶层三维瓦片模型8449个转换为顶层三维瓦片模型20个,合并得到的顶层三维瓦片模型内部是由成百上千个原始顶层三维瓦片模型,如果不进行简化模型内部数据结构,WebGL引擎进行解析模型内部结构,然后加载需要耗时超过20秒,简化之后模型内部只有一块几何体缓冲块、一张纹理图像,WebGL引擎进行加载简化后的模型耗时5秒左右;
步骤2:将实景三维的顶层瓦片模型转换为点云模型,提升实景三维顶层数据的加载速度;点云模型中只有顶点缓存区、与顶点对应的颜色缓存区,没有几何体和纹理图像,WebGL引擎加载速度快,WebGL引擎加载顶层模型转换的点云模型耗时2秒左右,同时因为模型金字塔前几层模型精度不高,转换为点云不会影响整个场景的精度;
步骤3:对模型空间索引的优化,构建高效的空间索引;WebGL引擎进行解析并加载模型数据顶层空间索引;由于顶层空间索引文件比较小,模型索引少,WebGL引擎加载速度快,能快速的获取模型金字塔前几层模型的信息,而且加载之后,就会一直缓存到缓存区中,不会被重复解析;而现有技术提供的模型空间索引有两种,一种是将所有的模型空间索引存储到一个文件中,一种是对每个模型生成一个空间索引,对于第一种将所有模型的空间索引存储到一个文件中,WebGL引擎进行解析并加载耗时超过2分钟;对于第二种每个模型对应一个空间索引文件,增加IO读写,当窗口视图进行来回切换的时候,空间索引会被来回请求并加载,造成大量资源的浪费。
结论:本实施例采用本发明进行空间索引构建时,实景三维数据加载速度快,耗时约为5秒;当三维浏览窗口进行来回切换的时候,实景三维顶层数据模型能快速响应,提升大范围实景三维交互的体验感;克服了现有技术实景三维数据加载速度慢(实景三维数据加载约需耗时约2分钟);当三维浏览窗口进行来回切换的时候,实景三维顶层数据模型响应速度慢(窗口来回切换的时实景三维顶层数据模型响应时间约需要30秒),严重影响大范围实景三维交互的体验感的缺陷。
其它未说明的部分均属于现有技术。

Claims (10)

1.一种计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:包括如下步骤,
步骤一:对实景三维模型内部结构的优化,简化模型内部数据结构;
对实景三维模型内部结构的优化包括对模型内部纹理图像的优化、几何体合并;将合并后的纹理图像与几何体存储到实景三维模型文件中;
步骤二:将实景三维的顶层瓦片模型转换为点云模型,提升实景三维顶层数据的加载速度;
步骤三:对实景三维模型空间索引的优化,构建高效的空间索引,获取新倾斜摄影三维模型。
2.根据权利要求1所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:在步骤一中,实景三维模型内部纹理图像的优化,包括对纹理图像的读取并压缩、将实景三维模型内部所有的纹理图像压缩并合并到一张纹理中,包括以子步骤:
步骤1.1.1:纹理图像的读取并压缩,创建图像合并结构体tagMergeImage;
步骤1.1.2:实景三维模型内多张纹理图像合并到一张纹理中。
3.根据权利要求2所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:图像合并结构体tagMergeImage包括图像缓存区ImageBuffer,图像的宽度ImageWidth,图像的高度ImageHeight,图像合并后的偏移量ImageOffset,偏移量中包含X方向起始位置x_start,Y方向起始位置y_start,X方向长度x_rangle,Y方向长度y_rangle;针对图像合并结构体tagMergeImage,创建图像合并容器vecMergeImage,包括以下子步骤:
步骤1.1.1.1:纹理图像的读取,使用OpenSceneGraph图形库,获取模型内部的所有纹理图像;
步骤1.1.1.2:纹理图像的压缩并压入图像合并容器中,使用开源库FreeImage,将获取到的纹理图像转换为JPEG格式的图像,获取图像的宽度与高度;创建图像合并结构体对象,将转换为JPEG格式的图像存入该对象中的ImageBuffer中,将图像的宽度与高度赋值给该对象的ImageWidth与ImageHeight。
4.根据权利要求3所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:在步骤1.1.2中,实景三维模型内多张纹理图像合并到一张纹理中的方法,包括图像合并容器中图像排序,获取目标图像大小,采用插入分裂法插入图像,计算容器中图像插入到目标图像中的偏移量,重新计算合并后图像的宽度与高度,将容器中图像按照偏移量保存目标图像中,重新计算容器中每个图片的偏移量。
5.根据权利要求4所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:采用插入分裂法插入图像,具体的插入流程,包括以下步骤:
步骤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得到每个纹理图像在合并后图像的偏移量,宽度(newImageHeight)的计算方法为从图像合并容器中取偏移量x_start+x_rangle最大值,高度(newImageHeight)的计算方法为从图像合并容器中取偏移量y_start+y_rangle最大值;
步骤1.1.2.3.5:将空闲容器中的纹理图像按照偏移量保存目标图像中,包括创建目标图像、将图像合并容器中图像插入到目标图像中和保存目标图像;。
步骤1.1.2.3.6:重新计算图片容器中每个图片的偏移量,图像合并容器中图像的偏移值x_start、y_start、x_rangle与y_rangle相对于整张图的比例,计算公式为:x_start=x_start*1.0/newImageWidth,y_start=y_start*1.0/newImageHeight,x_rangle=x_rangle*1.0/newImageWidth,y_rangle=y_rangle*1.0/newImageHeight。
6.根据权利要求5所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:在步骤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_start+x,y_start+y),将提取到的像素,赋值到目标图像对应的坐标中;
步骤1.1.2.3.5.3:将新得到的纹理图像保存到内存缓存区中。
7.根据权利要求6所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:在步骤一中,几何体合并,为将实景三维模型内部所有几何体合并到一个几何体中;几何体内部包括顶点集合、纹理坐标集合、法线集合、顶点索引集合;几何体合并的具体方法为:创建顶点内存缓存区、顶点索引内存缓存区、纹理坐标内存缓存区,遍历实景三维模型内部几何体,将几何体中顶点集合存入顶点内存缓存区,将顶点索引集合存入顶点索引内存缓存区,将纹理坐标集合存入纹理坐标内存缓存区,创建一个变量nPrePositionNum,用于记录之前处理几何体的顶点数默认值为0。
8.根据权利要求7所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:在步骤二中,将实景三维的顶层瓦片模型转换为点云模型,包括以下子步骤:
步骤2.1:创建顶点内存缓存区;
步骤2.2:创建颜色内存缓存区,从实景三维模型的几何体中获取纹理坐标集合,提取每个纹理坐标,找到与几何体关联的纹理图像,使用OpenSceneGraph图形库中接口,获取纹理坐标所在纹理图像中的颜色,将该颜色存入颜色内存缓存区中;
步骤2.3:将顶点内存缓存区、颜色内存缓存区、空间量化参数,按照点云模型的格式,写入文件中。
9.根据权利要求8所述的计及Web端的倾斜摄影模型空间索引构建与快速渲染方法,其特征在于:在步骤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_min)/65536,ScaleY=(y_max-y_min)/65536,ScaleZ=(z_max-z_min)/65536;
步骤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)存入顶点内存缓存区中。
10.根据权利要求9所述的计及Web端快速渲染的倾斜摄影空间索引构建方法,其特征在于:在步骤三中,实景三维模型空间索引中以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:模型数据顶层空间索引与模型数据精细层,按照空间索引的格式写入文件中。
CN202210906832.4A 2022-07-29 一种计及Web端快速渲染的倾斜摄影空间索引构建方法 CN115330933B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210906832.4A CN115330933B (zh) 2022-07-29 一种计及Web端快速渲染的倾斜摄影空间索引构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210906832.4A CN115330933B (zh) 2022-07-29 一种计及Web端快速渲染的倾斜摄影空间索引构建方法

Publications (2)

Publication Number Publication Date
CN115330933A true CN115330933A (zh) 2022-11-11
CN115330933B CN115330933B (zh) 2024-10-01

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116958385A (zh) * 2023-09-18 2023-10-27 园测信息科技股份有限公司 支持海量单体模型的材质纹理动态更新方法、存储介质及设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106600684A (zh) * 2016-11-29 2017-04-26 浙江科澜信息技术有限公司 一种倾斜模型组织构建方法
CN110706341A (zh) * 2019-09-17 2020-01-17 广州市城市规划勘测设计研究院 一种城市信息模型的高性能渲染方法、装置及存储介质
CN112102486A (zh) * 2020-09-04 2020-12-18 广州南方智能技术有限公司 一种基于合并根节点的倾斜摄影数据lod重建方法
EP3951719A1 (en) * 2019-03-28 2022-02-09 Southeast University Blended urban design scene simulation method and system
CN114742949A (zh) * 2022-04-18 2022-07-12 长江空间信息技术工程有限公司(武汉) 一种大规模实景三维数据的智能合并方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106600684A (zh) * 2016-11-29 2017-04-26 浙江科澜信息技术有限公司 一种倾斜模型组织构建方法
EP3951719A1 (en) * 2019-03-28 2022-02-09 Southeast University Blended urban design scene simulation method and system
CN110706341A (zh) * 2019-09-17 2020-01-17 广州市城市规划勘测设计研究院 一种城市信息模型的高性能渲染方法、装置及存储介质
CN112102486A (zh) * 2020-09-04 2020-12-18 广州南方智能技术有限公司 一种基于合并根节点的倾斜摄影数据lod重建方法
CN114742949A (zh) * 2022-04-18 2022-07-12 长江空间信息技术工程有限公司(武汉) 一种大规模实景三维数据的智能合并方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王庆栋,等: "利用倾斜摄影和3ds Max技术快速实现城市建模", 《测绘科学》, 30 June 2014 (2014-06-30), pages 74 - 78 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116958385A (zh) * 2023-09-18 2023-10-27 园测信息科技股份有限公司 支持海量单体模型的材质纹理动态更新方法、存储介质及设备
CN116958385B (zh) * 2023-09-18 2023-12-08 园测信息科技股份有限公司 支持海量单体模型的材质纹理动态更新方法、存储介质及设备

Similar Documents

Publication Publication Date Title
Nießner et al. Real-time 3D reconstruction at scale using voxel hashing
WO2020098531A1 (zh) 对象的加载方法和装置、存储介质、电子装置
CN108986195B (zh) 一种结合环境映射和全局光照渲染的单镜头混合现实实现方法
CN108520557B (zh) 一种图形图像融合的海量建筑绘制方法
Richter et al. Out-of-core real-time visualization of massive 3D point clouds
CN111583404B (zh) 海量倾斜摄影三维模型数据调度方法及系统
KR100959349B1 (ko) 그래픽스 처리 유닛을 이용한 사진트리 기반의 지형 렌더링 방법을 가속화하는 방법
CN110276820B (zh) 基于lod组织与调度方法的gis模型优化方法及系统
CN101364310A (zh) 一种三维模型图形的生成方法和装置
CN114612488A (zh) 建筑物单体化信息提取方法、计算机装置及存储介质
CN111784840B (zh) 基于矢量数据自动分割lod层级三维数据单体化方法及系统
CN102663800A (zh) 一种顾及城市意象的城市建筑综合与渲染的方法
CN112070909B (zh) 一种基于3D Tiles的工程三维模型LOD输出方法
CN114820975B (zh) 基于全要素参数符号化的三维场景仿真重构系统及方法
CN114004842A (zh) “分形视距”纹理压缩与彩色多边形纹理集成的三维模型可视化方法
CN116402966A (zh) 一种三维地形可视化仿真建模方法
US7439970B1 (en) Computer graphics
CN114926602A (zh) 基于三维点云的建筑物单体化方法及系统
CN114708414A (zh) 一种工程三维地形数据切割融合方法与系统
CN112102486A (zh) 一种基于合并根节点的倾斜摄影数据lod重建方法
CN117523125A (zh) 一种建筑物三维体块模型快速构建方法
CN115330933B (zh) 一种计及Web端快速渲染的倾斜摄影空间索引构建方法
CN115393530B (zh) 海量三维模型的单体化渲染方法、存储介质及电子设备
CN115330933A (zh) 一种计及Web端快速渲染的倾斜摄影空间索引构建方法
CN115063497A (zh) 一种点云数据处理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination