CN117152329A - 基于纹理映射的三维地形裁剪方法、装置及设备 - Google Patents
基于纹理映射的三维地形裁剪方法、装置及设备 Download PDFInfo
- Publication number
- CN117152329A CN117152329A CN202310742435.2A CN202310742435A CN117152329A CN 117152329 A CN117152329 A CN 117152329A CN 202310742435 A CN202310742435 A CN 202310742435A CN 117152329 A CN117152329 A CN 117152329A
- Authority
- CN
- China
- Prior art keywords
- clipping
- function
- texture
- variable
- value
- 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.)
- Pending
Links
- 238000013507 mapping Methods 0.000 title claims abstract description 52
- 238000000034 method Methods 0.000 title claims abstract description 45
- 229910052792 caesium Inorganic materials 0.000 claims abstract description 28
- TVFDJXOCXUVLDH-UHFFFAOYSA-N caesium atom Chemical compound [Cs] TVFDJXOCXUVLDH-UHFFFAOYSA-N 0.000 claims abstract description 28
- 238000012876 topography Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 121
- 239000011159 matrix material Substances 0.000 claims description 64
- 238000009877 rendering Methods 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004040 coloring Methods 0.000 claims description 3
- 239000012634 fragment Substances 0.000 claims description 3
- 238000010276 construction Methods 0.000 abstract description 3
- 230000000694 effects Effects 0.000 description 11
- 230000007547 defect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/05—Geographic models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
- G06T7/62—Analysis of geometric attributes of area, perimeter, diameter or volume
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Generation (AREA)
Abstract
本发明涉及一种基于纹理映射的三维地形裁剪方法、装置及设备,其属于三维平台地形显示技术领域,通过获取多边形区域根据属性判断显示或隐藏,利用多边形区域的所有点构造一个最小包围矩形,利用边界球理论将多边形添加到卸载集合中或显示集合中,重写Cesium引擎的函数getShaderProgram和函数endUpdate;将显示集合中的裁剪区域映射到画布中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪;本发明能够对多个任意多边形同时裁剪,通过施工站点模型数据所围成的任意多边形区域对不同地形进行快速、精准地裁剪。
Description
技术领域
本发明涉及三维平台地形显示技术领域,具体为一种基于纹理映射的三维地形裁剪方法、装置、设备及可读存储介质。
背景技术
现阶段,在地下施工项目开发过程中需要对地形进行裁剪,以保证地下隐蔽工程能直观的展示。如地铁项目一整条线路会包含通常多个站点,绝大多数站点的模型数据都在地表下,属于隐蔽工程。如果不将地下的模型数据直观的展示,用户定位到站点后就无法看到地下的站点工程。
目前Cesium三维GIS平台由于Cesium自身接口限制,全球只能设置一个裁剪区域,且创建裁剪区域只能设置一次,设置下一个裁剪区域的时候,上一个裁剪区域就会被覆盖,并且仅支持凸多边形地形裁剪。但是在Cesium三维GIS平台中会加载多个站的模型数据,站点模型数据在地下都需要局部地形裁剪,即需要对多个地形区域进行裁剪,且裁剪的区域可能是凸多边形或者是凹多边形的任意多边形。
综上所述,针对地下隐蔽工程,现有的Cesium三维GIS平台的裁剪方法存在以下问题:
(1)Cesium三维GIS平台支持地形裁剪,裁剪区域只能设置到地球,裁剪区域只能全球设置且只能设置一次;
(2)不能同时对多个裁剪区域进行裁剪;
(3)仅支持凸多边形的地形裁剪。
因此,在地下隐蔽工程施工过程中,现有的Cesium三维GIS平台的裁剪方法显然不能适用。鉴于此,亟需设计一种能够裁剪地表及地下的任意地形,支持多个区域同时裁剪,同时支持任意多边形裁剪的方法。
发明内容
本发明的目的在于提供一种基于纹理映射的三维引擎地形裁剪方法,以解决上述背景技术中提出的现有的Cesium三维GIS平台的裁剪方法不能够裁剪地表及地下的任意地形,不能同时对多个裁剪区域进行裁剪,仅支持凸多边形的地形裁剪的问题。
为实现上述目的,本发明提供如下技术方案:
一种基于纹理映射的三维地形裁剪方法,其包括以下步骤:
(1)获取多边形区域,将多边形区域添加至裁剪区域接口中,判断多边形区域的显示属性,如果多边形区域为隐藏状态,则将裁剪数据添加到隐藏集合中;如果多边形区域为显示状态,则进行下一步;
(2)进一步判断多边形区域的每个点是否在显示区域内,若每个点都不在显示区域内,则满足卸载条件,将多边形区域添加到卸载集合中;若任意一个或多个点在显示区域内,则进行下一步;
(3)利用多边形区域的所有点构造一个最小包围矩形,通过该矩形计算最小边界球;
(4)计算并判断最小边界球观察距离的几何误差值与最小边界球的几何误差值的大小,将多边形区域添加到卸载集合中或显示集合中;
(5)重写Cesium引擎的函数getShaderProgram和函数endUpdate;
(6)将显示集合中的裁剪区域映射到画布canvas中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪。
进一步限定,所述步骤(2)所述卸载条件为:多边形区域的可视距离超过预设的最大误差或多边形区域的每一个顶点不在显示区域内。
进一步限定,所述步骤(4)具体为:
(4.1)根据最小边界球的中心与虚拟相机的距离D,计算最小边界球观察距离的几何误差值E1;
E1=D/E0,
其中,E1为最小边界球观察距离的几何误差值,E0为屏幕空间误差值;
(4.2)计算最小边界球的几何误差值;
其中,E2为最小边界球的几何误差值;V为最小边界球的体积;d为边界球的直径;
(4.3)判断最小边界球观察距离的几何误差值E1和最小边界球的几何误差值E2大小,若E1>E2,则满足卸载条件,将多边形区域添加到卸载集合中;若E1≤E2,则将多边形区域添加到显示集合中。
进一步限定,所述步骤(5)包括:
(5.1)重写Cesium引擎的函数getShaderProgram
(5.1.1)定义全局变量setGlobeFS初始值为0;
(5.1.2)判断Cesium引擎的函数oldGetShaderProgram是否存在,若不存在,则将Cesium引擎中原始的函数getShaderProgram赋值给该函数oldGetShaderProgram并重写函数getShaderProgram;若存在,则不做处理;
(5.1.3)判断全局变量setGlobeFS值是否为0,若是,则获取片元着色器的数据源集合,将数据源集合中索引为1的内容修改为***脚本xh_fsShader,在其后增加自定义的着色源脚本createFS,调整全局定义变量setGlobeFS值为1;若否,则不做处理;
(5.1.4)调用原始的函数oldGetShaderProgram并返回,完成函数getShaderProgram的重写;
(5.2)重写Cesium引擎的函数endUpdate
(5.2.1)定义全局变量的初始值
是否裁剪变量m_xh_enabled=0
裁剪范围变量m_xh_flatten_extent=(0,0,0,0)
裁剪矩阵变量
裁剪纹理变量m_xh_flatten_texture)=null;
(5.2.2)判断函数oldEndUpdate是否存在,若不存在,则将原始的函数endUpdate赋值给该函数oldEndUpdate;若存在,则不做处理;
(5.2.3)重写函数endUpdate,调用原始的函数oldEndUpdate,获取***变量_uniformMaps集合,判断***变量_uniformMaps集合是否为空,不为空,则遍历***变量_uniformMaps集合中的每一个元素,实现每一个元素所对应的是否裁剪函数xh_enabled、裁剪范围函数xh_flatten_extent、裁剪矩阵函数xh_flatten_mat以及裁剪纹理函数xh_flatten_texture;若***变量_uniformMaps集合为空,则不做处理;
具体为:
是否裁剪函数xh_enabled的实现:返回是否裁剪变量m_xh_enabled
裁剪范围函数xh_flatten_extent的实现:返回裁剪范围变量m_xh_flatten_extent
裁剪矩阵函数xh_flatten_mat的实现:从步骤(4.3.1.7)重写的函数endUpdate的参数中获取视图矩阵,计算视图矩阵与裁剪矩阵变量m_xh_flatten_mat的乘积,计算其乘积的逆矩阵,返回当前逆矩阵;
裁剪纹理函数xh_flatten_texture的实现:判断裁剪纹理变量m_xh_flatten_texture是否为空,若是,则返回***默认纹理;若否,则返回裁剪纹理变量m_xh_flatten_texture;
(5.2.4)设置是否裁剪变量m_xh_enabled为1,完成函数endUpdate的重写。
进一步限定,所述(5.1.3)中的增加自定义的着色源脚本createFS的具体操作为:
获取是否裁剪函数xh_enabled、裁剪范围函数xh_flatten_extent、裁剪矩阵函数xh_flatten_mat以及裁剪纹理函数xh_flatten_texture;
判断是否裁剪函数xh_enabled为假,则调用***脚本xh_fsShader正常渲染,进程结束;若是否裁剪函数xh_enabled为真,利用任意一个vec3类型的坐标点构建vec4类型w值设为1的变量ep,计算裁剪矩阵函数xh_flatten_mat与变量ep的乘积为裁剪区域内任意一点的坐标vt;
将坐标vt缩小vt.w倍,判断,若坐标vt的x值大于裁剪矩阵函数xh_flatten_mat的z值或者坐标vt的x值小于0或者坐标vt的y值大于裁剪矩阵函数xh_flatten_mat的w值或者坐标vt的y值小于0,则调用***脚本xh_fsShader正常渲染,进程结束;反之,利用坐标vt的xy值除以裁剪范围函数xh_flatten_extent的zw值得到该点的uv坐标;
利用裁剪纹理函数xh_flatten_texture和uv坐标计算该点的颜色color,如果颜色color的r值小于1,则调用***脚本xh_fsShader正常渲染,进程结束;反之,不渲染该点。
进一步限定,所述步骤(6)具体为:
(6.1)将场景scene下的高动态范围渲染属性highDynamicRange设置为真;
(6.2)通过显示集合clip中的每一个多边形区域polygon计算合并多边形的经纬度最小值cmin、最大值cmax、区域的宽度width、高度height以及最小高度minHeight;
(6.3)设定映射宽度和高度,计算多边形的宽度与高度的比例rate,若比例大于1,则调整映射宽度,若小于等于1,则调整映射高度;
(6.4)创建画布canvas,设定画布canvas的属性;
(6.5)将显示集合clip中的所有多边形裁剪区域按照设定比例转换后绘制在画布canvas的2D渲染上下文,形成裁剪纹理;
(6.6)新建纹理对象,给纹理对象参数context和参数source赋值,动态更新函数getShaderProgram中色源脚本createFS的变量;
将新建的纹理对象赋值给裁剪纹理变量m_xh_flatten_texture;
(6.7)通过合并多边形的经纬度最小值cmin和最小高度minHeight计算包围矩形的最小经纬度c1,合并多边形的经纬度最大值cmax和最小高度minHeight计算包围矩形最大经纬度c2,获取c1垂直于当前地表的垂直坐标系矩阵,则为裁剪矩阵变量m_xh_flatten_mat,计算正北矩阵的逆矩阵ienu,计算正北矩阵的逆矩阵ienu与c2的乘积,将正北矩阵的逆矩阵ienu与c2的乘积的x值赋值给裁剪纹理变量m_xh_flatten_extent的z值,而正北矩阵的逆矩阵ienu与c2的乘积的y值赋值给裁剪范围变量m_xh_flatten_extent的w值,完成多边形三维地形裁剪。
进一步限定,所述步骤(6.4)中设定画布canvas的属性具体为:
宽度为调整后的映射宽度;
高度为调整后的映射高度;
位置为fixed函数模式;
样式属性右为0px,上为75px,z-index为10000;
获取画布canvas的2D渲染的上下文,设置填充颜色为红色,边框颜色为红色,线宽为1。
本发明的一种三维地形裁剪装置,其包括:
多边形获取模块,用于获取多边形区域,将多边形区域添加裁剪区域接口中;
处理模块,用于判断多边形获取模块所获取的多边形区域的显示状态,并判断多边形区域的每个点是否在显示区域内,是否满足卸载条件;并且利用多边形区域的所有点构造一个最小包围矩形,通过该矩形计算最小边界球,判断最小边界球距虚拟相机的观察距离所对应的几何误差值与最小边界球的几何误差值的大小,将多边形区域添加到卸载集合中或显示集合中;
显示模块,用于将显示属性为显示状态且多边形区域的每个点都在显示区域内,则将该多边形区域显示;
隐藏模块,用于将显示属性为隐藏状态则将该多边形区域隐藏;
映射模块,用于将显示集合中的裁剪区域映射到画布中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪。
本发明的一种计算机设备,其包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述基于纹理映射的三维地形裁剪方法的步骤。
本发明的一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述基于纹理映射的三维地形裁剪方法的步骤。
本发明提供一种基于纹理映射的三维地形裁剪方法、装置、设备及可读存储介质,通过对多边形区域进行隐藏和显示的筛选,构建最小包围盒,并对Cesium的插件进行二次开发,设定裁剪纹理,并动态更新重写函数的变量,对裁剪区域进行区域性渲染,进而可以实现任意多个多边形同时裁剪的目的,是一种能够对多个任意多边形同时裁剪的方法,通过施工站点模型数据所围成的任意多边形区域对不同地形进行快速、精准地裁剪。
其与现有技术相比,本发明的有益效果是:
(1)基于本发明的三维地形裁剪方法解决了同时裁剪多个区域问题,解决了凹多边形不能裁剪的难题,便于在项目工程管理中对地下模型数据的直观、灵活展示。
(2)基于本发明的纹理映射的三维地形裁剪方法延伸为参数化地形裁剪,地形裁剪参数化设计的参数要素,裁剪多边形点集合,操作少、速度快、准确度高,能够快速准确定位模型,解决了现有Cesium三维GIS平台的应用缺陷。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的全球裁剪流程图;
图2为从天空斜看地面的多区域任意多边形地形裁剪效果图;
图3为从地下斜看天空的多区域任意多边形地形裁剪效果图。
图4为从天空斜看地面的凸多边形地形裁剪效果图;
图5为从地下斜看天空的凸多边形地形裁剪效果图;
图6为从天空斜看地面的凹多边形地形裁剪效果图;
图7为从地下斜看天空的凹多边形地形裁剪效果图;
图8为三维地形裁剪装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明是基于Cesium三维GIS平台,主要针对现有的Cesium三维GIS平台不能同时对多个裁剪区域进行裁剪,而且裁剪区域只能全球设置且只能设置一次等应用缺陷而设计的,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
实施例1
请参阅图1~3,本发明提供的实施例:一种基于纹理映射的三维引擎地形裁剪方法,针对多个区域任意多边形地形裁剪效果图效果实例,可以通过以下步骤实现:
(1)获取多边形区域polygon,将多边形区域polygon添加至裁剪区域接口中,判断多边形区域polygon的显示(show)属性,如果多边形区域polygon为隐藏状态,则将裁剪数据添加到隐藏集合unclip中;如果多边形区域polygon为显示状态,则进行下一步;
(2)进一步判断多边形区域polygon的每个点是否在显示区域内,若每个点都不在显示区域内,则满足卸载条件,即多边形区域polygon的可视距离超过预设的最大误差或多边形区域polygon的每一个顶点不在显示区域内,则将其添加到卸载集合unloadclip中;若任意一个或多个点在显示区域内,则进行下一步;
(3)利用多边形区域polygon的所有点构造一个最小包围矩形,通过该矩形计算最小边界球;
(4)计算并判断最小边界球距虚拟相机的观察距离所对应的几何误差值与最小边界球的几何误差值的大小,将多边形区域polygon添加到卸载集合unloadclip中或显示集合clip中;
(4.1)根据最小边界球的中心与虚拟相机的距离D,计算最小边界球观察距离的几何误差值E1;
E1=D/E0,
其中,E1为最小边界球观察距离的几何误差值,E0为屏幕空间误差值;
(4.2)计算最小边界球的几何误差值;
其中,E2为最小边界球的几何误差值;V为最小边界球的体积;d为边界球的直径;
(4.3)判断最小边界球观察距离的几何误差值E1和最小边界球的几何误差值E2大小,若E1>E2,则满足卸载条件,将多边形区域polygon添加到卸载集合unloadclip中;若E1≤E2,则将多边形区域polygon添加到显示集合clip中。
(5)重写Cesium引擎的函数getShaderProgram和函数endUpdate;
(5.1)重写Cesium引擎的函数getShaderProgram
(5.1.1)定义全局变量setGlobeFS初始值为0;
(5.1.2)判断Cesium引擎的函数oldGetShaderProgram是否存在,若不存在,则将Cesium引擎中原始的函数getShaderProgram赋值给该函数oldGetShaderProgram并重写函数getShaderProgram;若存在,则不做处理;
(5.1.3)判断全局变量setGlobeFS值是否为0,若是,则获取片元着色器的数据源集合,将数据源集合中索引为1的内容修改为脚本xh_fsShader,在其后增加自定义的着色源脚本createFS,调整全局定义变量setGlobeFS值为1;若否,则不做处理;
进一步说明,增加自定义的着色源脚本createFS的具体操作为:
获取是否裁剪函数xh_enabled、裁剪范围函数xh_flatten_extent、裁剪矩阵函数xh_flatten_mat以及裁剪纹理函数xh_flatten_texture;
判断是否裁剪函数xh_enabled为假false,则调用***脚本xh_fsShader正常渲染,结束;若是否裁剪函数xh_enabled为真true,利用任意一个vec3类型的坐标点构建vec4类型w值设为1的变量ep,计算裁剪矩阵函数xh_flatten_mat与变量ep的乘积为裁剪区域内任意一点的坐标vt;
将坐标vt缩小vt.w倍,进一步判断:
若坐标vt的x值大于裁剪矩阵函数xh_flatten_mat的z值,调用***脚本xh_fsShader正常渲染,结束;
或者坐标vt的x值小于0,调用***脚本xh_fsShader正常渲染,结束;
或者坐标vt的y值大于裁剪矩阵的w值,调用***脚本xh_fsShader正常渲染,结束;
或者坐标vt的y值小于0,调用***脚本xh_fsShader正常渲染,结束;
上述任意一种的反之情形,则利用坐标vt的xy值除以裁剪范围函数xh_flatten_extent的zw值得到该点的uv坐标;
利用裁剪纹理函数xh_flatten_texture和uv坐标计算该点的颜色color,如果color的r值小于1,则调用***脚本xh_fsShader正常渲染,结束;反之,不渲染该点。
(5.1.4)调用原始的函数oldGetShaderProgram并返回,完成函数getShaderProgram的重写;
(5.2)重写Cesium引擎的函数endUpdate
(5.2.1)定义全局变量的初始值
是否裁剪变量m_xh_enabled=0
裁剪范围变量m_xh_flatten_extent=(0,0,0,0)
裁剪矩阵变量
裁剪纹理变量m_xh_flatten_texture)=null;
(5.2.2)判断函数oldEndUpdate是否存在,若不存在,则将原始的函数endUpdate赋值给该函数oldEndUpdate;若存在,则不做处理;
(5.2.3)重写函数endUpdate,调用原始的函数oldEndUpdate,获取***变量_uniformMaps集合,判断***变量_uniformMaps集合是否为空,不为空,则遍历***变量_uniformMaps集合中的每一个元素,实现每一个元素所对应的是否裁剪函数xh_enabled,裁剪范围函数xh_flatten_extent,裁剪矩阵函数xh_flatten_mat,裁剪纹理函数xh_flatten_texture;若***变量_uniformMaps集合为空,则不做处理;
具体为:
是否裁剪函数xh_enabled的实现:返回m_xh_enabled
裁剪范围函数xh_flatten_extent的实现:返回m_xh_flatten_extent
裁剪矩阵函数xh_flatten_mat的实现:从步骤(4.3.1.7)重写的函数endUpdate的参数中获取视图矩阵,计算视图矩阵与裁剪矩阵函数m_xh_flatten_mat的乘积,计算其乘积的逆矩阵,返回当前逆矩阵;
裁剪纹理函数xh_flatten_texture的实现:判断裁剪纹理变量m_xh_flatten_texture是否为空,若是,则返回***默认纹理;若否,则返回裁剪纹理变量m_xh_flatten_texture;
(5.2.4)设置是否裁剪变量m_xh_enabled为1,完成函数endUpdate的重写。
6)将显示集合clip中的裁剪区域映射到画布canvas中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪。
(6.1)将场景scene下的高动态范围渲染属性highDynamicRange设置为真true;
(6.2)通过显示集合clip中的每一个多边形区域polygon计算合并多边形的经纬度最小值cmin、多边形的经纬度最大值cmax、多边形的区域宽度width、合并多边形的区域高度height以及多边形的区域最小高度minHeight;
(6.3)设定映射宽度和高度,计算多边形的宽度与高度的比例rate,若比例大于1,则调整映射宽度(具体计算用设定的映射宽度除以rate),若小于等于1,则调整映射高度(具体计算用设定的映射高度除以rate);
(6.4)创建画布canvas,设定画布canvas的属性,即宽度为调整后的映射宽度,高度为调整后的映射高度,位置为fixed函数模式,样式属性右为0px,上为75px,z-index为10000,获取canvas的2D渲染的上下文,设置填充颜色为红色,边框颜色为红色,线宽为1。
(6.5)将显示集合clip中的所有多边形裁剪区域按照设定比例转换后绘制在画布canvas的2D渲染上下文,形成裁剪纹理;
x=(lon-cmin.x)/ilon)*width
y=(1-(lat-cmin.y)/ilat)*height
其中,Lon为多边形顶点的经度;ilon=cmax.x-cmin.x;
lat为多边形顶点的纬度;ilat=cmax.y-cmin.y;
cmin.x为多边形的经纬度最小值的x轴坐标值,cmax.x为多边形的经纬度最大值的x轴坐标值;
cmin.y为多边形的经纬度最小值的y轴坐标值,cmax.y为多边形的经纬度最大值的y轴坐标值。
(6.6)新建纹理对象,给纹理对象参数context和纹理对象参数source赋值,动态更新函数getShaderProgram中色源脚本createFS的变量;
Context=viewer.scene.context
Source=canvas
将新建的纹理对象赋值给裁剪纹理变量m_xh_flatten_texture;
(6.7)通过多边形的经纬度最小值cmin和多边形的经纬度最小高度minHeight计算包围矩形的最小经纬度c1,多边形的经纬度最大值cmax和多边形的经纬度最小高度minHeight计算包围矩形最大经纬度c2,获取c1垂直于当前地表的垂直坐标系矩阵,计为m_xh_flatten_mat;计算正北矩阵的逆矩阵ienu,计算正北矩阵的逆矩阵ienu与c2的乘积,将正北矩阵的逆矩阵ienu与c2的乘积的x值赋值给裁剪范围变量m_xh_flatten_extent的z值,而乘积的y值赋值给裁剪范围变量m_xh_flatten_extent的w值,完成多边形三维地形裁剪。
实施例2
请参阅图4、5,本发明提供的一种基于纹理映射的三维引擎地形裁剪方法,针对凸多边形地形裁剪效果实例。本实施例是在实施例1的基础上,与实施例1的不同之处在于:在步骤(1)中获取凸多边形区域,将凸多边形区域添加至裁剪区域接口中,判断凸多边形区域的显示属性,如果凸多边形区域为隐藏状态,则将裁剪数据添加到隐藏集合中;如果凸多边形区域为显示状态,则进行下一步;其他的操作均与实施例1相同。
实施例3
请参阅图6、7,本发明提供的一种实施例一种基于纹理映射的三维引擎地形裁剪方法,针对凹多边形地形裁剪效果实例,本实施例是在实施例1的基础上,与实施例1的不同之处在于:
在步骤(1)中获取凹多边形区域,将凹多边形区域添加至裁剪区域接口中,判断凹多边形区域的显示属性,如果凹多边形区域为隐藏状态,则将裁剪数据添加到隐藏集合中;如果凹多边形区域为显示状态,则进行下一步;其他的操作均与实施例1相同。
本发明对凹多边形的裁剪和凸多边形的裁剪步骤相同,能够实现任意多边形的裁剪,并且是多个裁剪区域内的任意多边形的裁剪,能够解决Cesium三维GIS平台不能同时对多个裁剪区域进行裁剪,而且裁剪区域只能全球设置且只能设置一次等应用缺陷,通过对多边形区域进行隐藏和显示的筛选,构建最小包围盒,并对Cesium的插件进行二次开发,设定裁剪纹理,并动态更新重写函数的变量,对裁剪区域进行区域性渲染,进而可以实现任意多个多边形同时裁剪的目的。
本发明还提供了一种能够实现上述实施例1~3的三维地形裁剪装置,下文描述的三维地形裁剪装置与上述的基于纹理映射的三维地形裁剪方法对应参照。
图8为三维地形裁剪装置的结构示意图,如图所示,本发明的三维地形裁剪装置包括:
多边形获取模块,用于获取多边形区域polygon,将多边形区域polygon添加裁剪区域接口中;
处理模块,用于判断多边形获取模块所获取的多边形区域polygon的显示(show)状态,并判断多边形区域polygon的每个点是否在显示区域内,是否满足卸载条件;并且利用多边形区域polygon的所有点构造一个最小包围矩形,通过该矩形计算最小边界球,判断最小边界球距虚拟相机的观察距离所对应的几何误差值与最小边界球的几何误差值的大小,将多边形区域polygon添加到卸载集合unloadclip中或显示集合clip中;
显示模块,用于将显示(show)属性为显示状态且多边形区域polygon的每个点都在显示区域内,则将该多边形区域polygon显示;
隐藏模块,用于将显示(show)属性为隐藏状态则将该多边形区域polygon隐藏;
映射模块,用于将显示集合clip中的裁剪区域映射到画布canvas中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪。
在此需要说明的是,本发明实施例提供的上述装置,能够实现上述方法实施例所实现的所有方法步骤,且能够达到相同的技术效果,在此不再对本实施例中与方法实施例相同的部分及有益效果进行具体赘述。
本发明还提供了一种计算机设备,其包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述基于纹理映射的三维地形裁剪方法的步骤。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分是以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
进一步说明,本发明还提供的一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述基于纹理映射的三维地形裁剪方法的步骤。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
Claims (10)
1.一种基于纹理映射的三维地形裁剪方法,其特征在于,包括以下步骤:
(1)获取多边形区域,将多边形区域添加至裁剪区域接口中,判断多边形区域的显示属性,如果多边形区域为隐藏状态,则将裁剪数据添加到隐藏集合中;如果多边形区域为显示状态,则进行下一步;
(2)进一步判断多边形区域的每个点是否在显示区域内,若每个点都不在显示区域内,则满足卸载条件,将多边形区域添加到卸载集合中;若任意一个或多个点在显示区域内,则进行下一步;
(3)利用多边形区域的所有点构造一个最小包围矩形,通过该矩形计算最小边界球;
(4)计算并判断最小边界球观察距离的几何误差值与最小边界球的几何误差值的大小,将多边形区域添加到卸载集合中或显示集合中;
(5)重写Cesium引擎的函数getShaderProgram和函数endUpdate;
(6)将显示集合中的裁剪区域映射到画布canvas中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪。
2.根据权利要求1所述的基于纹理映射的三维地形裁剪方法,其特征在于,所述步骤(2)所述卸载条件为:多边形区域的可视距离超过预设的最大误差或多边形区域的每一个顶点不在显示区域内。
3.根据权利要求1所述的基于纹理映射的三维地形裁剪方法,其特征在于,所述步骤(4)具体为:
(4.1)根据最小边界球的中心与虚拟相机的距离D,计算最小边界球观察距离的几何误差值E1;
E1=D/E0,
其中,E1为最小边界球观察距离的几何误差值,E0为屏幕空间误差值;
(4.2)计算最小边界球的几何误差值;
其中,E2为最小边界球的几何误差值;V为最小边界球的体积;d为边界球的直径;
(4.3)判断最小边界球观察距离的几何误差值E1和最小边界球的几何误差值E2大小,若E1>E2,则满足卸载条件,将多边形区域添加到卸载集合中;若E1≤E2,则将多边形区域添加到显示集合中。
4.根据权利要求1所述的基于纹理映射的三维地形裁剪方法,其特征在于,所述步骤(5)包括:
(5.1)重写Cesium引擎的函数getShaderProgram
(5.1.1)定义全局变量setGlobeFS初始值为0;
(5.1.2)判断Cesium引擎的函数oldGetShaderProgram是否存在,若不存在,则将Cesium引擎中原始的函数getShaderProgram赋值给该函数oldGetShaderProgram并重写函数getShaderProgram;若存在,则不做处理;
(5.1.3)判断全局变量setGlobeFS值是否为0,若是,则获取片元着色器的数据源集合,将数据源集合中索引为1的内容修改为***脚本xh_fsShader,在其后增加自定义的着色源脚本createFS,调整全局定义变量setGlobeFS值为1;若否,则不做处理;
(5.1.4)调用原始的函数oldGetShaderProgram并返回,完成函数getShaderProgram的重写;
(5.2)重写Cesium引擎的函数endUpdate
(5.2.1)定义全局变量的初始值
是否裁剪变量m_xh_enabled=0
裁剪范围变量m_xh_flatten_extent=(0,0,0,0)
裁剪矩阵变量
裁剪纹理变量m_xh_flatten_texture)=null;
(5.2.2)判断函数oldEndUpdate是否存在,若不存在,则将原始的函数endUpdate赋值给该函数oldEndUpdate;若存在,则不做处理;
(5.2.3)重写函数endUpdate,调用原始的函数oldEndUpdate,获取***变量_uniformMaps集合,判断***变量_uniformMaps集合是否为空,不为空,则遍历***变量_uniformMaps集合中的每一个元素,实现每一个元素所对应的是否裁剪函数xh_enabled、裁剪范围函数xh_flatten_extent、裁剪矩阵函数xh_flatten_mat以及裁剪纹理函数xh_flatten_texture;若***变量_uniformMaps集合为空,则不做处理;
具体为:
是否裁剪函数xh_enabled的实现:返回是否裁剪变量m_xh_enabled
裁剪范围函数xh_flatten_extent的实现:返回裁剪范围变量m_xh_flatten_extent
裁剪矩阵函数xh_flatten_mat的实现:从步骤(4.3.1.7)重写的函数endUpdate的参数中获取视图矩阵,计算视图矩阵与裁剪矩阵变量m_xh_flatten_mat的乘积,计算其乘积的逆矩阵,返回当前逆矩阵;
裁剪纹理函数xh_flatten_texture的实现:判断裁剪纹理变量m_xh_flatten_texture是否为空,若是,则返回***默认纹理;若否,则返回裁剪纹理变量m_xh_flatten_texture;
(5.2.4)设置是否裁剪变量m_xh_enabled为1,完成函数endUpdate的重写。
5.根据权利要求4所述的基于纹理映射的三维地形裁剪方法,其特征在于,所述(5.1.3)中的增加自定义的着色源脚本createFS的具体操作为:
获取是否裁剪函数xh_enabled、裁剪范围函数xh_flatten_extent、裁剪矩阵函数xh_flatten_mat以及裁剪纹理函数xh_flatten_texture;
判断是否裁剪函数xh_enabled为假,则调用***脚本xh_fsShader正常渲染,进程结束;若是否裁剪函数xh_enabled为真,利用任意一个vec3类型的坐标点构建vec4类型w值设为1的变量ep,计算裁剪矩阵函数xh_flatten_mat与变量ep的乘积为裁剪区域内任意一点的坐标vt;
将坐标vt缩小vt.w倍,判断,若坐标vt的x值大于裁剪矩阵函数xh_flatten_mat的z值或者坐标vt的x值小于0或者坐标vt的y值大于裁剪矩阵函数xh_flatten_mat的w值或者坐标vt的y值小于0,则调用***脚本xh_fsShader正常渲染,进程结束;反之,利用坐标vt的xy值除以裁剪范围函数xh_flatten_extent的zw值得到该点的uv坐标;
利用裁剪纹理函数xh_flatten_texture和uv坐标计算该点的颜色color,如果颜色color的r值小于1,则调用***脚本xh_fsShader正常渲染,进程结束;反之,不渲染该点。
6.根据权利要求1所述的基于纹理映射的三维地形裁剪方法,其特征在于,所述步骤(6)具体为:
(6.1)将场景scene下的高动态范围渲染属性highDynamicRange设置为真;
(6.2)通过显示集合clip中的每一个多边形区域polygon计算合并多边形的经纬度最小值cmin、最大值cmax、区域的宽度width、高度height以及最小高度minHeight;
(6.3)设定映射宽度和高度,计算多边形的宽度与高度的比例rate,若比例大于1,则调整映射宽度,若小于等于1,则调整映射高度;
(6.4)创建画布canvas,设定画布canvas的属性;
(6.5)将显示集合clip中的所有多边形裁剪区域按照设定比例转换后绘制在画布canvas的2D渲染上下文,形成裁剪纹理;
(6.6)新建纹理对象,给纹理对象参数context和参数source赋值,动态更新函数getShaderProgram中色源脚本createFS的变量;
将新建的纹理对象赋值给裁剪纹理变量m_xh_flatten_texture;
(6.7)通过合并多边形的经纬度最小值cmin和最小高度minHeight计算包围矩形的最小经纬度c1,合并多边形的经纬度最大值cmax和最小高度minHeight计算包围矩形最大经纬度c2,获取c1垂直于当前地表的垂直坐标系矩阵,则为裁剪矩阵变量m_xh_flatten_mat,计算正北矩阵的逆矩阵ienu,计算正北矩阵的逆矩阵ienu与c2的乘积,将正北矩阵的逆矩阵ienu与c2的乘积的x值赋值给裁剪纹理变量m_xh_flatten_extent的z值,而正北矩阵的逆矩阵ienu与c2的乘积的y值赋值给裁剪范围变量m_xh_flatten_extent的w值,完成多边形三维地形裁剪。
7.根据权利要求6所述的基于纹理映射的三维地形裁剪方法,其特征在于,所述步骤(6.4)中设定画布canvas的属性具体为:
宽度为调整后的映射宽度;
高度为调整后的映射高度;
位置为fixed函数模式;
样式属性右为0px,上为75px,z-index为10000;
获取画布canvas的2D渲染的上下文,设置填充颜色为红色,边框颜色为红色,线宽为1。
8.一种三维地形裁剪装置,其特征在于,包括:
多边形获取模块,用于获取多边形区域,将多边形区域添加裁剪区域接口中;
处理模块,用于判断多边形获取模块所获取的多边形区域的显示状态,并判断多边形区域的每个点是否在显示区域内,是否满足卸载条件;并且利用多边形区域的所有点构造一个最小包围矩形,通过该矩形计算最小边界球,判断最小边界球距虚拟相机的观察距离所对应的几何误差值与最小边界球的几何误差值的大小,将多边形区域添加到卸载集合中或显示集合中;
显示模块,用于将显示属性为显示状态且多边形区域的每个点都在显示区域内,则将该多边形区域显示;
隐藏模块,用于将显示属性为隐藏状态则将该多边形区域隐藏;
映射模块,用于将显示集合中的裁剪区域映射到画布中形成裁剪纹理,动态更新函数getShaderProgram中色源脚本createFS的变量,完成多边形三维地形裁剪。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述基于纹理映射的三维地形裁剪方法的步骤。
10.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述基于纹理映射的三维地形裁剪方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310742435.2A CN117152329A (zh) | 2023-06-21 | 2023-06-21 | 基于纹理映射的三维地形裁剪方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310742435.2A CN117152329A (zh) | 2023-06-21 | 2023-06-21 | 基于纹理映射的三维地形裁剪方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117152329A true CN117152329A (zh) | 2023-12-01 |
Family
ID=88883041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310742435.2A Pending CN117152329A (zh) | 2023-06-21 | 2023-06-21 | 基于纹理映射的三维地形裁剪方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117152329A (zh) |
-
2023
- 2023-06-21 CN CN202310742435.2A patent/CN117152329A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7280121B2 (en) | Image processing apparatus and method of same | |
US9384596B2 (en) | Visualization of obscured objects in 3D space | |
US7884825B2 (en) | Drawing method, image generating device, and electronic information apparatus | |
US7561156B2 (en) | Adaptive quadtree-based scalable surface rendering | |
US9589386B2 (en) | System and method for display of a repeating texture stored in a texture atlas | |
US7629972B2 (en) | Image-based protruded displacement mapping method and bi-layered displacement mapping method using the same | |
US9275493B2 (en) | Rendering vector maps in a geographic information system | |
KR20140073480A (ko) | 라인을 따른 텍스트 이미지 렌더링 | |
EP1519317B1 (en) | Depth-based antialiasing | |
CN111968214B (zh) | 一种体积云渲染方法、装置、电子设备及存储介质 | |
CN114820990B (zh) | 一种基于数字孪生的流域防洪可视化方法及*** | |
US6850234B2 (en) | Method and system for determining visible parts of transparent and nontransparent surfaces of there-dimensional objects | |
CN111494944A (zh) | 一种地形纹理加载方法及相关装置 | |
CN110136262B (zh) | 水体虚拟可视化方法和装置 | |
US11908063B2 (en) | Displacement-centric acceleration for ray tracing | |
CN113902832A (zh) | 一种洪水三维动态演进和渲染方法、装置及电子设备 | |
CN117152329A (zh) | 基于纹理映射的三维地形裁剪方法、装置及设备 | |
CN109427084B (zh) | 一种地图显示方法、装置、终端及存储介质 | |
JPH0636013A (ja) | 地形データの作成方法および装置 | |
CN115908733A (zh) | 一种角点网格地质模型的实时切分及三维可视化方法 | |
CN106780693B (zh) | 一种通过绘制方式选择三维场景中物体的方法及*** | |
CN111354081A (zh) | 大规模三维森林绘制方法 | |
CN112446959B (zh) | 一种倾斜摄影模型优化方法 | |
Mower | Supporting automated pen and ink style surface illustration with B-spline models | |
CN114155346B (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 |