CN109636889B - 一种基于动态缝合带的大规模三维地形模型渲染方法 - Google Patents
一种基于动态缝合带的大规模三维地形模型渲染方法 Download PDFInfo
- Publication number
- CN109636889B CN109636889B CN201811374963.2A CN201811374963A CN109636889B CN 109636889 B CN109636889 B CN 109636889B CN 201811374963 A CN201811374963 A CN 201811374963A CN 109636889 B CN109636889 B CN 109636889B
- Authority
- CN
- China
- Prior art keywords
- terrain
- dynamic
- main
- block
- terrain block
- 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.)
- Active
Links
Images
Classifications
-
- 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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种基于动态缝合带的大规模三维地形模型渲染方法,可以用于三维地理场景中基于高度图的大规模三维地形建模与表达,该方法包括:利用四叉树结构将地形划分为主要地形块、补丁地形块和动态缝合带三种不同类型的区域;在实时浏览过程中,根据视点位置选取需要绘制的主要地形块并确定地形块细分级别;对地形模型进行多级视锥体裁剪;根据动态缝合带的邻接关系及地形块细分级别,并行地完成动态缝合带的顶点获取以及三角化构网;利用GPU曲面细分生成地形块,将补丁地形块转化为三角网。本发明通过引入动态缝合带,能够使得主要地形块的级别根据视点作连续变化,大大减少了实时浏览过程中的视觉突变误差,显著提升了地形模型的真实感。
Description
技术领域
本发明属于计算机图形学领域,具体涉及一种基于动态缝合带的大规模三维地形模型渲染方法。
背景技术
现有的三维地形模型渲染方法可以根据所使用数据结构的不同大致分为如下几个方面:
(1)基于不规则三角网的地形渲染方法
通过对高度图不均匀采样,不规则三角网能够将更多的三角网分布到细节更为丰富的地形区域。和规则格网相比,生成不规则三角网需要复杂的三角化过程,例如Delaunay三角化。此外,基于不规则三角网创建多分辨率网格也较为困难。Cignoni等在预处理阶段记录细化和简化操作的步骤,能够支持多分辨率的地形三角网。Cohen-Or等以一种自底向上的方式,通过不断移除多边形面片内的顶点并重新Delaunay三角化,得到了多分辨的地形模型。Hoppe提出了一种视点相关的渐进网格模型并将其应用到了地形渲染领域,借助于边折叠和顶点分裂操作,实现了实时浏览过程中不同LOD级别地形网格之间的平滑过渡。
(2)基于规则和半规则结构的地形渲染方法
规则格网简单的结构为数据存储和管理带来了极大的便利,例如可以通过顶点的位置坐标获得其在网格中的索引。De Boer将多级纹理的思想与高度图结合以渲染多分辨率地形模型。Losasso和Hoppe基于clipmap提出了Geometry Clipmap。他们以一系列以视点为中心的嵌套矩形规则格网表示地形,形成了一种独立于高度图的多层次结构,从而不必再设计相应的视点相关的LOD准则。
基于半规则结构的方法一般用由约束性四叉树或二叉树组织的一系列等腰直角三角形表示地形模型,这类结构一般被称为RTIN。RTIN的优势在于可以利用多层次的结构构建视点相关的适应性网格,而网格的细化和粗化则通过最长边二分(三角形分裂)和顶点移除(三角形合并)操作实现。Pajarola利用限制性四叉树保证相邻四叉树节点在公共边上的三角形个数一致,能够避免裂缝的出现。基于三角形二叉树,Duchaineau等提出了三角形合并与分裂的一系列约束条件来保证地形网格的无缝构建。Lindstrom等以一种自底向上的方式不断移除基于层次四叉树的地形网格中的顶点和多边形,可以实现地形模型在多边形级别上的连续变化。
(3)结合半规则结构和不规则三角网的方法
相比于单独采用半规则结构的方法构建地形模型,一些研究将半规则结构和不规则三角网结合来构建地形模型。Cignoni等通过实验对比认为结合半规则结构和不规则三角网的方法能够更高效地表达地形。Velho综合两种结构的优势提出了基于4-8meshes的地形渲染方法,该方法在预处理阶段预先生成不规则三角网面片,在实时浏览过程中,通过四叉树层次结构的变化来实现模型的细化和粗化;四叉树的节点,即不规则三角网面片无需根据视点变化作复杂的更新操作,而是作为一个整体直接送入GPU中渲染。这种做法减轻了CPU的处理负担,为实时渲染大规模地形数据提供了一种有效的途径。类似地,Pajarola等基于限制性四叉树提出了QuadTIN的地形三角化方法,相比于最长边二分操作将最长边的中点加入到更为精细的三角网中,QuadTIN方法则是从输入的不规则点集中选取一个对角线附近的点,从而可以保证不破坏限制性四叉树的约束条件。
近年来,随着图形硬件性能的不断提升以及可编程渲染管线的发展,一些研究开始利用现代GPU提供的新特性对传统地形渲染方法进行改进。Larsen和Christensen在顶点着色器中对网格顶点原始位置和目标位置进行插值,实现了相邻LOD级别之间的平滑转变。Ripolles等提出了一种完全基于GPU几何着色器的地形LOD渲染算法。该方法在预定义的七种细分模式的基础上,通过几何着色器实现三角形的分裂与合并。由于在实时渲染过程中是以三角形的边为基本单元进行视点相关的细化与粗化操作,从而无需考虑边界裂缝问题。Christian等将GPU光线投射算法引入到地形渲染中,能够大大减少需要渲染的几何数据量,提升渲染效率,但该方法生成的地形并不支持实时交互编辑。Zhai等提出利用四叉树结合GPU曲面细分技术进行地形渲染,能够显著提升大规模地形的渲染效率,但容易导致浏览过程中的视觉跳变现象。Song等提出了基于GPU曲面细分技术与Geometry Clipmap的渲染方法,他们仅将地形网格的控制点发送到GPU,从而大大降低了CPU-GPU数据传输负担。
总体上来说,在过去的几十年中,地形渲染算法在表示模型、误差控制方案和LOD级别过渡等方面取得了一定的成果。现如今,越来越多的研究已经将关注点从基于CPU的多级别地形更新策略转移到了基于GPU的地形渲染上。然而,大部分方法过多地关注于地形渲染效率的提升,而忽略了地形浏览过程中可能出现的视觉跳变现象。如何在保证渲染效率的同时提高地形真实感仍然有待进一步的研究。
发明内容
发明目的:针对现有大规模地形渲染方法存在的不足,本发明公开了一种基于动态缝合带的大规模三维地形模型渲染方法,通过设计基于动态缝合带(能够在实时浏览过程中动态变化的条带状结构)的多层次地形模型,地形网格能够以连续的方式在不同级别间过渡,并且无需考虑边界裂缝问题,显著减少了浏览过程中的视觉突变现象,提升了地形模型的真实感。
技术方案:本发明公开了一种基于动态缝合带的大规模三维地形模型渲染方法,可以用于虚拟地理环境中大规模地形数据的实时渲染与交互浏览,包括如下步骤:
(1)利用四叉树结构将地形划分为三种不同类型的区域:主要地形块、补丁地形块和动态缝合带;其中每个节点对应一个主要地形块,补丁地形块位于四个具有相同父节点的子节点中央,动态缝合带位于相邻的主要地形块之间;
(2)在实时浏览过程中,根据视点位置选取需要绘制的主要地形块,并通过比较屏幕空间误差阈值与不同细分级别物体空间误差对应的屏幕空间误差确定地形块细分级别;
(3)对地形模型进行多级视锥体裁剪,对不在视锥体内的主要地形块和补丁地形块进行裁剪处理;
(4)根据动态缝合带与主要地形块的邻接关系以及主要地形块的细分级别,并行地完成动态缝合带的顶点获取以及三角化构网;
(5)利用GPU曲面细分生成地形块,补丁地形块在几何着色器中转化为三角网。
进一步地,步骤(1)中主要地形块结构包括:主要地形块对应的四叉树节点的编号、主要地形块的坐标和边长、GPU曲面细分阶段用于决定主要地形块精细程度的因子、主要地形块在四叉树中所处的级别、指向当前地形块的四个子节点的指针和记录相邻动态缝合带编号的数组。
进一步地,步骤(2)中主要地形块的曲面细分级别通过插值随视点的移动作连续变化,具体包括:
(2.1)在预处理阶段,计算出每个主要地形块处在不同的细分级别时与原始模型在高度方向上的平均误差作为物体空间误差;
(2.2)设屏幕空间误差阈值为ρthres,在实时浏览过程中,从最高细分级别的误差开始,将地形块不同级别的物体空间误差对应的屏幕空间误差与ρthres进行比较,直到某个级别的误差大于ρthres为止,最终地形块的细分级别将通过两个相邻级别误差的线性插值得到。
进一步地,步骤(3)中在OpenGL自动裁剪之前,构建主要地形块沿坐标轴方向的长方体包围盒,对该包围盒进行可见性测试,只有当包围盒全部位于视锥体外时,其所对应的地形块才会被裁剪;对于一个通过可见性测试的地形块,进一步判断其四条边界的可见性,位于视锥体之外的边将被裁剪。
进一步地,步骤(4)中的动态缝合带的三角网在CPU中生成并且通过三角化算法在实时渲染阶段生成,具体包括如下步骤:
(4.1)根据主要地形块中所存储的相邻动态缝合带索引,查找到与当前所要构建的动态缝合带相邻的主要地形块,保存这些主要地形块与动态缝合带的公共边,作为所要构建动态缝合带的轮廓;
(4.2)基于OpenGL的细分模式和主要地形块中的细分级别,对步骤(4.1)中收集的公共边进行细分,生成动态缝合带的顶点;
(4.3)动态缝合带三角化,基于垂直平分线规则连接动态缝合带的顶点。
进一步地,步骤(4.2)中动态缝合带的顶点生成方法为:
设某一视点位置下主要地形块的细分级别为f,m为不大于f的最大偶数,主要地形块与动态缝合带的公共边被划分为m个等长的线段和另外2个长度短一些的等长线段;2个短一些的线段的长度与f-m的值成反比,当f-m=2时,2个短一些的线段长度最长,与m个等长线段的长度相同;当n-m=0时,2个短一些的线段长度为0。
进一步地,步骤(4.3)动态缝合带三角化的方法步骤包括:
(4.3.1)输入一条动态缝合带两侧的初始顶点{an|1≤n≤N},{bm|1≤m≤M},其中N和M分别是动态缝合带两侧根据细分级别生成的顶点的数量;
(4.3.2)从一侧的顶点中选择两个相邻的顶点ai、ai+1;
(4.3.3)作线段aiai+1的垂直平分线l,找到在对侧顶点中距离l最近的顶点bj;
(4.3.4)生成三角形Δaiai+1bj;
(4.3.5)依次处理同一侧的其他顶点;
(4.3.6)按照步骤(4.3.2)至(4.3.5)的方法处理对侧顶点。
进一步地,步骤(5)中的利用GPU曲面细分生成主要地形块主要包括将预处理阶段生成的物体空间误差以纹理方式传入GPU中,并根据步骤(2)中的方法计算细分级别;补丁地形块借由几何着色器进行图元扩展,四个角点被三角化为两个三角形。
有益效果:本发明针对以往大规模地形渲染方法在实时浏览过程中存在的视觉突变问题,设计了一种基于动态缝合带的多层次地形模型,通过引入动态缝合带结构,主要地形块可以无需考虑避免裂缝,从而能够以一种连续的方式改变其GPU曲面细分级别,显著地减少了在浏览过程中地形的跳变现象,提升了地形模型的真实感。此外,采用设计的多级视锥体裁剪策略和考虑动态缝合带几何特征的三角化算法极大地减少了实时渲染时数据负担,显著提升了渲染效率,能够满足实时交互浏览的需求。
附图说明
图1为基于动态缝合带的地形模型渲染流程图;
图2a为地形模型区域划分的二维投影示意图;
图2b为叠加网格后的三维地形模型示意图;
图3a四叉树节点编号示意图;
图3b为地形块与动态缝合带关系示意图;
图4为地形模型多层次更新原理图;
图5a为多级视锥体裁剪示意图;
图5b为图5a的二维投影示意图;
图6为动态缝合带生成示意图;
图7为动态缝合带顶点生成示意图;
图8a为狭长三角形导致的瑕疵示意图;
图8b为动态缝合带三角化原理示意图;
图9a为视线与地形平面大致平行时的地形效果图;
图9b为视线与地形平面接近垂直时的地形效果图;
图10为本发明方法与现有方法的效果对比图;其中图(a)-(d)为现有方法在视点逐渐靠近模型的渲染效果图,图(a’)-(d’)为b本发明方法在视点逐渐靠近模型的渲染效果图。
具体实施方式
下面结合附图和具体实施例对本发明做进一步说明。
如图1所示,本发明实施例公开的一种基于动态缝合带的大规模地形渲染方法主要包括基于四叉树和动态缝合带的地形区域划分、多层次地形模型更新、多级视锥体裁剪、动态缝合带并行生成以及GPU渲染五个步骤。下面结合具体实施方式对本发明的技术方案作进一步的介绍。
1.基于四叉树和动态缝合带的地形区域划分
本步骤利用四叉树结构将地形划分为三种不同类型的区域:主要地形块(M-block),补丁地形块(P-block),动态缝合带(DSS)。主要地形块在GPU曲面细分阶段生成并赋予合适的LOD级别,主要地形块结构如下:
MBD={Id,Position,Size,Ftessellation,Lquadtree,Ptschild,Idsneighbour}
其中,Id表示主要地形块对应的四叉树节点的编号。Position和Size字段分别记录了主要地形块的坐标和边长。Ftessellation是在GPU曲面细分阶段用于决定主要地形块精细程度的因子。Lquadtree表示主要地形块在四叉树中所处的级别。Ptschild包含了指向当前地形块的四个子节点的指针。Idsneighbour是一个含有四个元素的数组,记录了相邻动态缝合带的编号。MBD包含了构建主要地形块所需的几何和其他属性信息,补丁地形块和动态缝合带也将基于MBD构建。
如图2a、2b所示,在利用四叉树完成对地形的划分后,获得的直接结果是处在不同层次的四叉树节点,每个节点对应了一个主要地形块。主要地形块构成了地形的主体,在GPU曲面细分阶段,根据计算出的曲面细分级别,主要地形块被细分成分辨率满足一定误差条件的正方形格网。如图3a所示,基于四叉树可以为所有的节点赋予一个编号。设某个节点编号为k,从左下角开始,沿逆时针方向,其四个子节点依次编号为4(k+1),4(k+1)+1,4(k+1)+2,4(k+1)+3.
补丁地形块位于四个具有相同父节点的子节点中央,它是一个由四个顶点组成的正方形网格,所有的补丁地形块具有同样的边长尺寸。设整个地形网格的宽度为width,使用的高度图的分辨率为resolution,则补丁地形块的边长为:width/resolution。如图3b所示,补丁地形块的四个顶点实际上是其周围的四个主要地形块的角点。通过GPU几何着色器,补丁地形块的四个控制点被转化为三角网。
动态缝合带位于相邻的主要地形块之间,其宽度与补丁地形块边长一致。对于每个四叉树节点(根节点除外)都有一个与其在逆时针方向上相邻的动态缝合带与之对应。因此可以为每条动态缝合带赋予与其对应的四叉树节点相同的编号,如图3b所示。
2.多层次地形模型更新
地形多层次更新主要分为两个阶段:四叉树层级更新和主要地形块内部细分级别更新。
2.1在四叉树层级更新阶段,本发明采用深度优先的方式由上至下对地形进行四叉树划分。当视点位置发生变化时,四叉树的层次结构也要随之改变。这种变化看起来就像是四叉树节点在不断地分裂与合并。然而本文在具体实现时,采用了一种预先处理的方法,即预先构建一棵完全四叉树,在地形模型实时更新过程中只需选取当前视点要求的节点进行绘制,从而省去了较为复杂的分裂和合并操作。由于每个四叉树节点(主要地形块)只包含左下角顶点坐标、四叉树级别等少量信息,只会占用很少的内存,对程序性能造成的影响可以忽略。
2.2在主要地形块内部细分级别更新阶段,本发明根据在预处理阶段计算出的地形块物体空间误差,确定主要地形块的细分级别,具体如下:
(1)在预处理阶段,本发明首先对每个主要地形块分别在32个偶数细分级别(2,4,…,62,64)上将其与原始地形模型的高度进行比较,将计算出的高度差作为各个级别的物体空间误差。
但对于基于高度图的地形渲染,其采用的高度方向的误差会受到视线朝向的影响。从图4中可以看出,随着地形块中心到视点的向量与地形块法向量之间的夹角θ改变,地形块当前实际的物体空间误差δ在视线方向上的投影大小δ’=δsinθ也将变化。因此上式可以修改为:
设屏幕空间误差阈值为ρthres,从最高细分级别的误差开始,将地形块不同级别的物体空间误差δi对应的屏幕空间误差ρi与ρthres进行比较。由于从ρ1到ρ32的值不断减小,可以找到位于ρthres两侧的两个屏幕空间误差ρi和ρi+1。由于ρi和ρi+1分别对应细分级别2i和2(i+1),可以通过插值计算出ρthres所对应的细分级别,实现主要地形块的连续变化。最终地形块的细分级别Ftessellation将通过两个相邻级别误差的线性插值得到,公式如下:
其中li=2i,是ρi对应的细分级别。
3.多级视锥体裁剪
在近距离浏览地形模型时,整个地形实际上只有部分可见,其余部分位于视锥体外。虽然OpenGL会自动根据视锥体的设置来剪切几何体,但对于一些最终不会显示到屏幕中的几何数据,仍然会在着色器中进行处理,导致处理器计算资源的浪费。对此,本发明设计了CPU阶段的多层次视锥体裁剪策略(图5a、5b)。首先对于每个主要地形块,构建其AABB(Axis-Aligned Bounding Box)包围盒,只有当包围盒全部位于视锥体外时才会被裁剪。对于一个通过可见性测试的地形块,还需要进一步判断其四条边界的可见性。考虑以下情况:一个只有部分可见的地形块,有两条边并不在视锥体内,在这种情况下,没有必要对这两条不在视锥体内的边进行细分操作,应予以裁剪。
4.动态缝合带生成
动态缝合带生成的主要流程如图6所示,包括以下三个步骤:
4.1.记录动态缝合带和周围地形块的邻接关系
MBD中Idsneighbour记录了相邻动态缝合带索引值。对于一个Idsneighbour已知的主要地形块,其子节点的Idsneighbour可以在父节点分裂时计算得到,方法分别如下:首先将主要地形块的边按图3b所示依次分别标记为a~d。
左下角子节点:a,d两条边实际上与父节点的a,d边重合,因此Idsneighbour[0]和Idsneighbour[3]可以分别沿用父节点的值。b则由于与分裂产生的新的子节点相邻,因此Idsneighbour[1]=4(n+1)。同样的,c也与分裂产生的新的子节点相邻,因此Idsneighbour[2]=4(n+1)+3。
右下角子节点:a,b两条边实际上与父节点的a,b边重合,因此Idsneighbour[0]和Idsneighbour[1]可以分别沿用父节点的值。c则由于与分裂产生的新的子节点相邻,因此Idsneighbour[1]=4(n+1)+1。同样的,d也与分裂产生的新的子节点相邻,因此Idsneighbour[3]=4(n+1)。
右上角子节点:b,c两条边实际上与父节点的b,c边重合,因此Idsneighbour[1]和Idsneighbour[2]可以分别沿用父节点的值。a则由于与分裂产生的新的子节点相邻,因此Idsneighbour[0]=4(n+1)+1。同样的,d也与分裂产生的新的子节点相邻,因此Idsneighbour[2]=4(n+1)+2。
左上角子节点:c,d两条边实际上与父节点的c,d边重合,因此Idsneighbour[2]和Idsneighbour[3]可以分别沿用父节点的值。a则由于与分裂产生的新的子节点相邻,因此Idsneighbour[0]=4(n+1)+3。同样的,b也与分裂产生的新的子节点相邻,因此Idsneighbour[1]=4(n+1)+2。
4.2.动态缝合带顶点生成
为了保证动态缝合带和主要地形块在公共边上的顶点一一吻合,需要获取主要地形块边界上的顶点作为动态缝合带的初始顶点。然而主要地形块边界上的顶点是在GPU曲面细分阶段产生的,并且难以将其从显存传递到内存中供边界缝合带利用。对此,本发明在CPU中模拟GPU曲面细分模式以获得动态缝合带的初始顶点,方法如下:
设某一视点位置下主要地形块的细分级别为f(f根据2.2中的公式(4)计算得出),m为不大于f的最大偶数,在曲面细分阶段,主要地形块的边界将被划分为m个等长的线段和另外2个长度短一些的等长线段。2个短一些的线段的长度与f-m的值成反比,当f-m=2时,2个短一些的线段长度最长,与m个等长线段的长度相同;当n-m=0时,2个短一些的线段长度为0。例如,在图7中,主要地形块边的细分级别从4过渡到5.9,可以看到4条较长线段和2条较短线段长度的变化过程。
4条较长线段和2条较短线段在主要地形块边界上是对称分布的,可以由两侧向中间对线段进行编号(图7)。2条新产生的较短线段的位置,可以根据如下公式确定:
4.3.动态缝合带三角化
对动态缝合带进行三角化时,需要考虑三角化生成的网格的视觉效果(即不出现狭长三角形等瑕疵,如图8a),同时也要满足模型实时构建和渲染的需要。常用的三角化算法Delaunay Triangulation具有最大化最小角和唯一性等特点,能够保证生成网格的视觉效果,但它并不是为实时渲染而设计的。因此本发明设计了一种既考虑网格视觉效果又注重渲染效率的三角化算法,具体原理和流程如下:
动态缝合带的顶点排布具有一定的规则,即它们位于两条平行的直线上。对于一侧的任意两个相邻顶点,连接它们形成一条基线,若要根据该基线构成一个新的三角形,第三个顶点必定在对侧。对于第三点的渲染,应该尽量使其位于该基线的垂直平分线上,以避免狭长三角形的出现(如图8b)。
基于以上原理,将三角化算法的步骤描述如下:
(1)输入一条动态缝合带两侧的初始顶点{an|1≤n≤N},{bm|1≤m≤M},N和M分别是动态缝合带两侧根据细分级别生成的顶点的数量;
(2)从一侧的顶点中选择两个相邻的顶点ai,ai+1;
(3)作线段aiai+1的垂直平分线l,找到在对侧顶点中距离l最近的顶点bj;
(4)生成三角形Δaiai+1bj;
(5)依次处理同一侧的其他顶点;
(6)按照上述方式处理对侧顶点。
5.GPU渲染
5.1基于GPU曲面细分生成主要地形块
在预处理阶段生成的地形块物体空间误差(见2.2节),被存储在一张二维纹理中,并在渲染开始前传输至到GPU曲面细分控制着色器。此外,视点位置和视口参数(尺寸、视野大小)也被一同传入。通过主要地形块的角点坐标,可以从物体空间误差纹理中采样得到该主要地形块对应的32个不同细分级别的δi(i=1,2,…,31),进而根据公式(4)可以获得其曲面细分级别Ftessellation。在接下来的图元生成和曲面细分计算着色器阶段,主要地形块被转化为细节更为丰富的网格并沿高度方向拉伸,形成最终的主要地形块网格。
5.2基于GPU几何着色器生成补丁地形块
补丁地形块左下角的角点(见图3b)在渲染时被传入到GPU几何着色器。在几何着色器中可以以输入的角点为基础,根据补丁地形块的尺寸计算得到其他三个角点。这四个角点在几何着色器中被三角化为两个三角形。
图9a、9b展示了在不同视角下地形的渲染效果。在图9a中主要地形块较图9b中更靠近视点,但由于图9a中视角相对于图9b更为接近俯视,因此图9a中的地形块没有分裂。另外,在主要地形块与动态缝合带的连接处,过渡十分平滑没有裂缝。
图10为本发明方法在减少视觉误差方面与其他方法的效果对比图(图10的a~d为参考Zhai的方法的渲染结果,图10的a’~d’为采用本发明方法的渲染结果)。从左至右,显示了视点逐渐靠近模型的过程。可以明显观察到,和其他方法相比,本发明的方法可以显著减少地形浏览过程中突变现象,提升地形实时浏览过程中的真实感。
Claims (6)
1.一种基于动态缝合带的大规模三维地形模型渲染方法,其特征在于,包括如下步骤:
(1)利用四叉树结构将地形划分为三种不同类型的区域:主要地形块、补丁地形块和动态缝合带;其中每个节点对应一个主要地形块,补丁地形块位于四个具有相同父节点的子节点中央,动态缝合带位于相邻的主要地形块之间;
(2)在实时浏览过程中,根据视点位置选取需要绘制的主要地形块,并通过比较屏幕空间误差阈值与不同细分级别物体空间误差对应的屏幕空间误差确定地形块细分级别;
(3)对地形模型进行多级视锥体裁剪,对不在视锥体内的主要地形块和补丁地形块进行裁剪处理;
(4)根据动态缝合带与主要地形块的邻接关系以及主要地形块的细分级别,并行地完成动态缝合带的顶点获取以及三角化构网;其中动态缝合带的三角网在CPU中生成并且通过三角化算法在实时渲染阶段生成,具体包括:
(4.1)根据主要地形块中所存储的相邻动态缝合带索引,查找到与当前所要构建的动态缝合带相邻的主要地形块,保存这些主要地形块与动态缝合带的公共边,作为所要构建动态缝合带的轮廓;
(4.2)基于OpenGL的细分模式和主要地形块中的细分级别,对步骤(4.1)中收集的公共边进行细分,生成动态缝合带的顶点;其中动态缝合带的顶点生成方法为:设某一视点位置下主要地形块的细分级别为f,m为不大于f的最大偶数,主要地形块与动态缝合带的公共边被划分为m个等长的线段和另外2个长度短一些的等长线段;2个短一些的线段的长度与f-m的值成反比,当f-m=2时,2个短一些的线段长度最长,与m个等长线段的长度相同;当f-m=0时,2个短一些的线段长度为0;
(4.3)动态缝合带三角化,基于垂直平分线规则连接动态缝合带的顶点;
(5)利用GPU曲面细分生成地形块,补丁地形块在几何着色器中转化为三角网。
2.根据权利要求1所述的基于动态缝合带的大规模三维地形模型渲染方法,其特征在于,步骤(1)中主要地形块结构包括:主要地形块对应的四叉树节点的编号、主要地形块的坐标和边长、GPU曲面细分阶段用于决定主要地形块精细程度的因子、主要地形块在四叉树中所处的级别、指向当前地形块的四个子节点的指针和记录相邻动态缝合带编号的数组。
3.根据权利要求1所述的基于动态缝合带的大规模三维地形模型渲染方法,其特征在于,步骤(2)中主要地形块的曲面细分级别通过插值随视点的移动作连续变化,具体包括:
(2.1)在预处理阶段,计算出每个主要地形块处在不同的细分级别时与原始模型在高度方向上的平均误差作为物体空间误差;
(2.2)设屏幕空间误差阈值为ρthres,在实时浏览过程中,从最高细分级别的误差开始,将地形块不同级别的物体空间误差对应的屏幕空间误差与ρthres进行比较,直到某个级别的误差大于ρthres为止,最终地形块的细分级别将通过两个相邻级别误差的线性插值得到。
4.根据权利要求1所述的基于动态缝合带的大规模三维地形模型渲染方法,其特征在于,步骤(3)中在OpenGL自动裁剪之前,构建主要地形块沿坐标轴方向的长方体包围盒,对该包围盒进行可见性测试,只有当包围盒全部位于视锥体外时,其所对应的地形块才会被裁剪;对于一个通过可见性测试的地形块,进一步判断其四条边界的可见性,位于视锥体之外的边将被裁剪。
5.根据权利要求1所述的基于动态缝合带的大规模三维地形模型渲染方法,其特征在于,步骤(4.3)动态缝合带三角化的方法步骤包括:
(4.3.1)输入一条动态缝合带两侧的初始顶点{an|1≤n≤N},{bm′|1≤m′≤M},其中N和M分别是动态缝合带两侧根据细分级别生成的顶点的数量;
(4.3.2)从一侧的顶点中选择两个相邻的顶点ai、ai+1;
(4.3.3)作线段aiai+1的垂直平分线l,找到在对侧顶点中距离l最近的顶点bj;
(4.3.4)生成三角形Δaiai+1bj;
(4.3.5)依次处理同一侧的其他顶点;
(4.3.6)按照步骤(4.3.2)至(4.3.5)的方法处理对侧顶点。
6.根据权利要求1所述的基于动态缝合带的大规模三维地形模型渲染方法,其特征在于,步骤(5)中的利用GPU曲面细分生成主要地形块主要包括将预处理阶段生成的物体空间误差以纹理方式传入GPU中,并根据步骤(2)中的方法计算细分级别;补丁地形块借由几何着色器进行图元扩展,四个角点被三角化为两个三角形。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811374963.2A CN109636889B (zh) | 2018-11-19 | 2018-11-19 | 一种基于动态缝合带的大规模三维地形模型渲染方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811374963.2A CN109636889B (zh) | 2018-11-19 | 2018-11-19 | 一种基于动态缝合带的大规模三维地形模型渲染方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109636889A CN109636889A (zh) | 2019-04-16 |
CN109636889B true CN109636889B (zh) | 2020-09-08 |
Family
ID=66068399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811374963.2A Active CN109636889B (zh) | 2018-11-19 | 2018-11-19 | 一种基于动态缝合带的大规模三维地形模型渲染方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109636889B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110176058B (zh) * | 2019-04-25 | 2020-12-11 | 浙江大学 | 一种基于草图和卷积曲面的沉浸式快速建模方法 |
CN111210515A (zh) * | 2019-12-30 | 2020-05-29 | 成都赫尔墨斯科技股份有限公司 | 一种基于地形实时渲染的机载合成视觉系统 |
CN111563948B (zh) * | 2020-03-30 | 2022-09-30 | 南京舆图科技发展有限公司 | 基于gpu进行资源动态处理和缓存的虚拟地形渲染方法 |
CN111968212B (zh) * | 2020-09-24 | 2024-05-03 | 中国测绘科学研究院 | 一种基于视点的三维城市场景数据动态调度方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261743A (zh) * | 2007-10-19 | 2008-09-10 | 北京航空航天大学 | 一种基于规则网格的大规模地形漫游模拟方法 |
CN101727681A (zh) * | 2008-10-30 | 2010-06-09 | 如临其境创意(上海)有限公司 | 一种基于金字塔模型的海量地形绘制网格裂缝消除算法 |
KR101491896B1 (ko) * | 2013-02-18 | 2015-02-11 | 인하대학교 산학협력단 | 이중모드 정점 분할기법을 이용한 지형 렌더링 가속화 방법 |
CN108717729A (zh) * | 2018-05-25 | 2018-10-30 | 武汉大学 | 一种面向虚拟地球的地形多尺度tin在线可视化方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9818201B2 (en) * | 2014-12-22 | 2017-11-14 | Lucasfilm Entertainment Company Ltd. | Efficient lens re-distortion |
-
2018
- 2018-11-19 CN CN201811374963.2A patent/CN109636889B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261743A (zh) * | 2007-10-19 | 2008-09-10 | 北京航空航天大学 | 一种基于规则网格的大规模地形漫游模拟方法 |
CN101727681A (zh) * | 2008-10-30 | 2010-06-09 | 如临其境创意(上海)有限公司 | 一种基于金字塔模型的海量地形绘制网格裂缝消除算法 |
KR101491896B1 (ko) * | 2013-02-18 | 2015-02-11 | 인하대학교 산학협력단 | 이중모드 정점 분할기법을 이용한 지형 렌더링 가속화 방법 |
CN108717729A (zh) * | 2018-05-25 | 2018-10-30 | 武汉大学 | 一种面向虚拟地球的地形多尺度tin在线可视化方法 |
Non-Patent Citations (2)
Title |
---|
Parallel View-Dependent Level-of-Detail Control;Liang Hu 等;《IEEE Transactions on Visualization and Computer Graphics》;20090828;第16卷(第5期);第718-728页 * |
三维地形场景并行渲染技术进展;佘江峰 等;《武汉大学学报》;20120430;第37卷(第4期);第463-467页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109636889A (zh) | 2019-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109636889B (zh) | 一种基于动态缝合带的大规模三维地形模型渲染方法 | |
CN105336003B (zh) | 结合gpu技术实时流畅绘制出三维地形模型的方法 | |
CN109410332B (zh) | 基于点线面的三维空间几何虚拟模型细节层次裁剪方法 | |
KR100916474B1 (ko) | 등고선이 표현하는 지역을 다각형 세부 영역들로 분해하고 수치표고모델 데이터와 지형 표면 구성 데이터를 산출하는 방법과, 그 방법을 실행하기 위한 프로그램이 기록된 기록 매체 | |
CN111462318B (zh) | 一种基于视点互信息的三维树木模型实时简化方法 | |
US7561156B2 (en) | Adaptive quadtree-based scalable surface rendering | |
CN108961411A (zh) | 一种保持外观特征的复杂三维建筑物模型简化方法 | |
CN105205866A (zh) | 基于密集点云的城市三维模型快速构建方法 | |
CN107220372B (zh) | 一种三维地图线要素注记自动放置方法 | |
KR20100136604A (ko) | 3차원 지형 영상 실시간 가시화 시스템 및 이의 방법 | |
CN109118588B (zh) | 一种基于块分解的彩色lod模型自动生成方法 | |
US7358969B2 (en) | Method and system for partitioning the surface of a three dimentional digital object model in order to map a texture | |
CN114494641A (zh) | 一种三维模型轻量化方法及装置 | |
Maurya et al. | Performance of greedy triangulation algorithm on reconstruction of coastal dune surface | |
CN111028349B (zh) | 一种适用于海量三维实景数据快速可视化的层级构建方法 | |
CN117333648A (zh) | 一种gis三维地形与数字信息模型融合的方法及系统 | |
CN115033972B (zh) | 一种建筑主体结构批量单体化方法、系统及可读存储介质 | |
Li | Real-world large-scale terrain model reconstruction and real-time rendering | |
CN106981095B (zh) | 一种改进的光滑自由变形方法 | |
CN115131237A (zh) | 一种面片平滑度优化方法、系统、设备和存储介质 | |
CN114155327A (zh) | 一种智能多分辨率特征优化的三维重建方法及系统 | |
US7196703B1 (en) | Primitive extension | |
CN109509249B (zh) | 一种基于部件的虚拟场景光源智能生成方法 | |
Chang et al. | Hierarchical simplification of city models to maintain urban legibility. | |
CN106097447A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |