CN113593028A - 一种用于航电显控的三维数字地球构建方法 - Google Patents
一种用于航电显控的三维数字地球构建方法 Download PDFInfo
- Publication number
- CN113593028A CN113593028A CN202110881749.1A CN202110881749A CN113593028A CN 113593028 A CN113593028 A CN 113593028A CN 202110881749 A CN202110881749 A CN 202110881749A CN 113593028 A CN113593028 A CN 113593028A
- Authority
- CN
- China
- Prior art keywords
- vertex
- data
- shader
- texture
- calculating
- 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
Images
Classifications
-
- 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
- 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/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/10—Geometric effects
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)
- Image Generation (AREA)
Abstract
本发明涉及一种用于航电显控的三维数字地球构建方法,包括读取地形文件:读取加载地形文件,解析为地形数据后生成原始地形数据到内存中;计算顶点数据:计算生成顶点属性数据;传输顶点数据:计算空间大小并进行数据传输交互;创建着色器:生成顶点着色器和片段着色器的源代码,创建对应的可执行逻辑单元;渲染准备及渲染:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器,调用绘图指令glDrawElements进行渲染,执行顶点着色器和片段着色器,并将渲染结果输出到窗口中以显示三维数字地球。本发明通过采用数据切分和复用的方式,即保证了顶点数据全部写入VBO,也可以避免分配大块显存而失败的情况。
Description
技术领域
本发明涉及航电显控技术领域,尤其涉及一种用于航电显控的三维数字地球构建方法。
背景技术
显控界面是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。而航电显控系统作为航电系统的重要部分之一,其发展历程从最开始到现在分别经历了第一代飞机仪表、机电伺服仪表时期、综合指引仪表、CRT电光显示仪表和现代显控系统五个过程。
但是,目前主流的航电显控界面设计平台(例如:VAPS XT)只能提供二维显控界面的可视化开发功能,不具有三维视景的功能,而二维已经不能满足目前的战场态势的需要;三维数字地球是在传统地理信息系统技术的基础上,以真实三维场景虚拟现实,具有直观可视和高效等特点,其也是航电显控装置中最重要的一个组成部分,因此,如何构建三维航电显控装置中的三维数字地球,是现阶段急需解决的。
发明内容
本发明的目的在于克服现有技术的缺点,提供了一种用于航电显控的三维数字地球构建方法,能够实现在三维航电显控装置中对三维数字地球的构建。
本发明的目的通过以下技术方案来实现:一种用于航电显控的三维数字地球构建方法,所述构建方法包括:
读取地形文件:采用GDAL库来读取加载地形文件,解析为地形数据后生成原始地形数据到内存中;
计算顶点数据:计算包括三维世界坐标、法线和纹理坐标的顶点属性并生成顶点属性数据;
传输顶点数据:计算空间大小并进行数据传输交互;
创建着色器:使用GLSL语言生成顶点着色器和片段着色器的源代码,并在GPU中创建对应的可执行逻辑单元;
渲染准备:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器;
渲染:调用绘图指令glDrawElements进行渲染,采用现代OpenGL渲染方法分别执行创建的顶点着色器和片段着色器,并将渲染结果输出到窗口中以显示三维数字地球。
所述计算顶点数据具体包括:
已知起始点的经纬度,根据顶点的二维坐标计算顶点的经纬度,顶点的高度值就是其二维坐标在栅格元数据中的值,然后参考相机中的世界坐标公式计算世界坐标;
根据当前顶点选取两个紧邻当前顶点的顶点,并计算两个顶点与当前顶点之间的向量,再将两个向量叉乘得到法向量;
根据生成的颜色表文件生成纹理,计算顶点的纹理坐标后进行纹理采用获取顶点颜色。
所述根据生成的颜色表文件生成纹理,计算顶点的纹理坐标后进行纹理采用获取顶点颜色具体包括:
通过第三方工具生成一维颜色表文件;
根据一维颜色表文件创建一维纹理,纹理的宽度表示颜色的总数,通过glTexImage1D函数将内存中纹理参数写入到显存中,OpenGL中纹理的坐标范围0到1之间,那么颜色表被将会映射到0-1之间的范围,纹理坐标0对应颜色表中第一个颜色,1则对应最后一个颜色;
输入当前顶点的高度值、最大高度值和最小高度值计算得到顶点的纹理坐标,实现将顶点的高度映射到0-1之间的范围,与显存中纹理坐标保持一致。
输入纹理的编号和顶点的纹理坐标在片段着色器中调用采样函数从纹理中获取到顶点颜色。
所述传输顶点数据具体包括:
计算空间大小,使用glGenBuffers创建一个VBO对象,设置VBO的类型为GL_ARRAY_BUFFER,VBO里面存放的是顶点数据,提供给顶点着色器使用,glBufferData函数将为当前绑定的VBO分配一块数据存储空间,将内存中的顶点数据写入到该空间中,glBufferData中的最后一个参数是GL_STATIC_DRAW,表示数据存储内容只被初始化一次,以利于GPU的空间分配。
如果VBO分配存储空间失败,则采用数据切分和复用的方式,将一大块数据切分呈多个容量相同的小块数据,然后将小块数据传输到显存中,最后进行渲染。
所述数据切分和复用的步骤包括:
设置单个数据块的容量为6MB,并根据数据块的容量计算出能够容纳的顶点行数;
根据顶点的总数计算出需要的数据块数量,并创建相同数量的VBO;
按照数据块容量分配内存空间,遍历顶点数组;
依次读取容纳行数的顶点、计算顶点和传输顶点。
所述创建着色器具体包括:
glGetShaderiv函数创建着色器程序,通过glShaderSource函数设置顶点着色器和片段着色器的源代码并根据glCompileShader函数编译源代码;
glAttachShader函数将顶点着色器和片段着色器绑定到着色器程序,并通过glLinProgram函数连接着色器程序。
所述渲染准备的具体包括:
通过glUseProgram函数运行着色器程序,启动着色器程序中的输入属性;
设置顶点着色器中对应的透视矩阵、观察矩阵和模型矩阵变量,设置片段着色器中对应的光照参数和纹理编号;
绑定VBO数据到显存中,并将解析的VBO数据传递给顶点着色器,顶点着色器将数据的结构与输入属性进行关联。
所述现代OpenGL渲染方法包括:
顶点着色器步骤:用于将以数组的形式传递输入的3个3D坐标转换为另一种3D坐标后输入到图元装配步骤;
图元装配步骤:用于将所有的点装配呈指定的图元形状后输入到几何着色器步骤;
几何着色器步骤:用于把图元形状的一系列顶点的几何作为输入,产生新顶点构造出新的图元来生成其它图元形状,并输入到光栅化步骤;
光栅化步骤:用于把图元映射为最终屏幕上相应的像素,生成供片段着色器单元使用的片段;
片段着色器步骤:用于根据包含的3D场景数据来计算一个像素的最终颜色
测试和混合步骤:用于检测片段的深度值和模板值,以用来判断像素的位置,以及检测alpha值并对物体进行混合。
本发明具有以下优点:一种用于航电显控的三维数字地球构建方法,采用现代OpenGL渲染方法优于传统的OpenGL,尤其当数据量越大,其效率的优势就越明显;通过采用数据切分和复用的方式,即保证了顶点数据全部写入VBO,也可以避免分配大块显存而失败的情况。
附图说明
图1为本发明的方法流程示意图;
图2为数据传输流程示意图;
图3为数据切分和复用流程示意图;
图4为渲染前准备流程示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下结合附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的保护范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。下面结合附图对本发明做进一步的描述。
如图1所示,本发明涉及一种用于航电显控的三维数字地球构建方法,所述构建方法包括:
S1、读取地形文件:采用GDAL库来读取加载地形文件,解析为地形数据后生成原始地形数据到内存中;
具体为,采用GDAL库来读取地形文件,文件的格式为tiff栅格数据;其中,GDAL库的全称是地理空间数据抽象库,它是一个用于读取栅格和矢量地理空间数据格式的软件库,由开源地理空间基金会在X/MIT许可协议下发布。作为一个库,它为应用程序提供了一个单一的抽象数据模型,用来解析它所支持的所有格式。
栅格数据中投影方式WGS-84地心坐标系,它包含一套地球的标准经纬坐标系;栅格文件中的元数据表示地形高度值,单位是米;数据的采样精度表示每个数据点在经度和纬度方向上的范围大小;起始点坐标表示栅格的左上角位置的经纬度。根据起始点的坐标可以计算任意顶点的经纬度。
S2、计算顶点数据:计算包括三维世界坐标、法线和纹理坐标的顶点属性并生成顶点属性数据;
进一步地,栅格数据中包含有顶点的经纬高信息,基于顶点的经纬高,分别计算出顶点的世界坐标、法线以及纹理坐标,它们构成了顶点数据。世界坐标用于顶点着色器中空间位置的计算,顶点法线用于片段着色器中关于光照颜色的计算,顶点的纹理坐标用于获取顶点的颜色。顶点的最终颜色将顶点本身的颜色和光照颜色相结合。
顶点数据包括顶点的世界坐标、法线以及纹理坐标三个属性;
其中,计算顶点的世界坐标为:首先计算每个顶点的经纬度,然后再将其转换成世界坐标;具体为:顶点的二维坐标表示该顶点相对于起始点的偏移量。已知起始点的经纬度,根据顶点的二维坐标,来计算顶点的经纬度。顶点的高度值就是其二维坐标在栅格元数据中的值;
输入变量:起始点的经度StartLongtitude、起始点的纬度StartLatituede、顶点的行数Rows、顶点的列数Cols、栅格元数据、采样精度CellSize、顶点的二维坐标OffsetX、OffsetY;根据计算公式Longtitude=StartLongtitude+OffsetX*CellSize、Latitude=StartLatitude-OffsetY*CellSize和Altitude=data[OffsetY][OffsetX];输出得到:顶点的经度Longtitude、顶点的纬度Latitude和顶点的高度Altitude。
计算顶点的法线为:根据当前顶点选取两个紧邻当前顶点的顶点,并计算两个顶点与当前顶点之间的向量,再将两个向量叉乘得到法向量;
计算顶点的纹理坐标为:顶点颜色是根据顶点的纹理坐标从纹理中进行采样而得到。首先需要生成纹理,并计算顶点的纹理坐标,最后渲染时片段着色器会进行纹理采样获取顶点颜色。具体为:
为了得到较为平滑的高程颜色效果,通过第三方工具生成一维颜色表文件;可以设置颜色表中的颜色总数,比如256种或者64等;每种颜色的值是RGB格式;可以设置关键位置的颜色,位于两个关键位置之间的颜色是经过线性插值运算而得到的。也就是middleColor(t)=beginColor*(1–t)+endColor*t,0<=t<=1;
纹理采集获取顶点颜色,根据一维颜色表文件创建一维纹理,纹理的宽度表示颜色的总数,通过glTexImage1D函数将内存中纹理参数写入到显存中,OpenGL中纹理的坐标范围0到1之间,那么颜色表被将会映射到0-1之间的范围,纹理坐标0对应颜色表中第一个颜色,1则对应最后一个颜色;
输入当前顶点的高度值CurrentHeight、最大高度值MaxHeight和最小高度值MinHeight,根据公式texCoord=(CurrentHeight–MinHeight)*(1.0/(MaxHeight-MinHeight)),计算得到顶点的纹理坐标,实现将顶点的高度映射到0-1之间的范围,与显存中纹理坐标保持一致。
输入纹理的编号TextureId和顶点的纹理坐标texCoord,根据公式color=texture1D(TextureId,texCoord),在片段着色器中调用采样函数从纹理中获取到顶点颜色。
S3、传输顶点数据:计算空间大小并进行数据传输交互;
如图2所示,进一步地,计算空间大小,使用glGenBuffers创建一个VBO对象,设置VBO的类型为GL_ARRAY_BUFFER,VBO里面存放的是顶点数据,提供给顶点着色器使用,glBufferData函数将为当前绑定的VBO分配一块数据存储空间,将内存中的顶点数据写入到该空间中,glBufferData中的最后一个参数是GL_STATIC_DRAW,表示数据存储内容只被初始化一次,以利于GPU的空间分配;
其中,计算空间大小为,输入变量:单个顶点占用的空间大小SizeOfVertex,等于顶点的各个属性占用大小之和,顶点的行数:Rows、顶点的列数:Cols,根据公式NumbersVertex=Rows*Cols和SizeOfAllVertex=SizeOfVertex*NumbersVertex得到所有顶点占用的空间大小SizeOfAllVertex。
而由于地形的顶点数量大以及当前显存的使用情况,为VBO分配一大块连续的存储空间的时候,可能会导致分配失败;解决方法是采用数据切分和复用,将一大块数据切分成多个容量相同的小块数据,然后将小块数据传输到显存中,最后进行渲染。在内存中的分配一个小块数据空间并循环使用,做到内存复用。在将数据写入显存前,提前分配多个VBO,然后将小块数据写入对应的VBO中,既保证了顶点数据全部写入VBO,也可以避免分配大块显存而失败的情况。
如图3所示,具体为:设置单个数据块的容量为6MB,并根据数据块的容量计算出能够容纳的顶点行数;
根据顶点的总数计算出需要的数据块数量,并创建相同数量的VBO;
按照数据块容量分配内存空间,遍历顶点数组;
依次读取容纳行数的顶点、计算顶点和传输顶点。
S4、创建着色器:使用GLSL语言生成顶点着色器和片段着色器的源代码,并在GPU中创建对应的可执行逻辑单元;
具体为:glGetShaderiv函数创建着色器程序,通过glShaderSource函数设置顶点着色器和片段着色器的源代码并根据glCompileShader函数编译源代码;
glAttachShader函数将顶点着色器和片段着色器绑定到着色器程序,并通过glLinProgram函数连接着色器程序。
在创建着色器的各个阶段执行后都可以获取执行的结果,比如编译着色器源代码后可以使用glGetShaderiv函数以及参数GL_COMPILE_STATUS。通过获取执行结果的详细信息,可以帮助检测出源代码的语法或者逻辑错误。
S5、渲染准备:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器;
进一步地,如图4所示,所述渲染准备的具体包括:
通过glUseProgram函数运行着色器程序,启动着色器程序中的输入属性;
设置顶点着色器中对应的透视矩阵、观察矩阵和模型矩阵变量,设置片段着色器中对应的光照参数和纹理编号;
绑定VBO数据到显存中,并将解析的VBO数据传递给顶点着色器,顶点着色器将数据的结构与输入属性进行关联。
具体为:由于场景中需要改变观察的视角或者光照的位置等,所以在渲染前相应的参数传递给着色器。目前顶点着色器不知道VBO中数据的结构,将解析VBO数据的方式告知顶点着色器。调用绘图指令glDrawElements进行渲染,OpenGL分别执行顶点着色器和片段着色器,并将渲染结果输出到窗口中。
S6、渲染:调用绘图指令glDrawElements进行渲染,采用现代OpenGL渲染方法分别执行创建的顶点着色器和片段着色器,并将渲染结果输出到窗口中以显示三维数字地球。
进一步地,OpenGL使用冯氏光照模型(Phong Lighting Model),其由三个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照,光照的颜色为白光,考虑到当前应用场景只采用环境和漫反射两种光照效果,不使用镜面光照。可以设置光照参数中环境光照和漫反射光照的强度。
其中光照的计算方法为:输入变量:光照颜色lightColor、环境光强度ambient、漫反射强度diffuse、法线向量Normal、顶点位置WorldPos、光照位置lightPos和顶点颜色colorObj,根据公式AmbientColor=lightColor*ambient计算环境光;根据lightDir=normalize(lightPos-WorldPos)计算光照反向,根据DiffuseFactor=dot(lightDir,Normal)(向量点积)计算漫反射因子,根据DiffuseColor=lightColor*DiffuseFactor*diffuse计算漫反射,然后根据FragColor=colorObj*(AmbientColor+DiffuseColor)输出颜色。
传统的OpenGL是采用立即渲染模式,渲染效率较低。现代OpenGL在渲染效率上要优于传统的OpenGL,尤其当数据量越大,效率的优势越明显。三维地形的数据量较大,达到上百兆的数据量,所以采用现代OpenGL的渲染方式,才能满足渲染的指标。
其图形渲染管线接收一组3D坐标,然后把它们转变为屏幕上的2D像素显示输出。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。所有这些阶段都是高度专业化的(它们都有一个特定的函数),并且很容易并行执行。正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在GPU上为每个渲染阶段运行各自的小程序,从而在图形渲染管线中快速处理数据。这些小程序叫做着色器(shader)。图形渲染管线包含很多部分,每个部分都将在转换顶点数据到最终像素这个过程中处理各自特定的阶段,本发明会概况性地解释管线的各个部分。
因此,现代OpenGL渲染方法具体包括:
首先,以数组的形式传递3个3D坐标作为图形渲染管线的输入,用来表示三角形,这个数组叫做顶点数据(Vertex Data);顶点数据是一系列顶点集合,一个顶点(Vertex)是一个3D坐标的数据集合。而顶点数据时用顶点属性(VertexAttribute)表示的,它可以包含任何我们想用的数据比如3D坐标、颜色、纹理。
图形渲染管线的第一个部分是顶点着色器(Vertex Shader),它把一个单独的顶点作为输入。顶点着色器的主要目的是把3D坐标转换为另一种3D坐标,同时顶点着色允许我们对顶点属性进行一些基本的处理。
图元装配(Primitive Assembly)阶段将顶点着色器输出的所有顶点作为输入(如果是GL_Points,那么就是一个顶点),并将所有的点装配成指定的图元的形状;比如三角形。
图元装配阶段的输出会传给几何着色器(Geometry Shader)。几何着色器把图元形式的一系列顶点的几何作为输入,它可以通过产生新顶点构造出新的(或是其他)图元来生成其他星座。例子中,它生成了另一个三角形。
几何着色器的输出会被传入光栅化阶段(Rasterization Stage),这里是它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行前会执行裁剪(Clipping)。裁剪会丢弃超过视图以外的所有像素,用来提升执行效率。
其中,OpenGL中的一个片段是OpenGL渲染像素所需的所有数据,比如顶点坐标、颜色等。片段着色器的主要目的是计算一个像素的最终颜色,这也是OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、纹理等),这些数据可以被用来计算最终像素的颜色。
在所有对应颜色值确认以后,最终的对象将会被传到最后一个阶段,叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的深度值和模板Stencil值,用来判断这个像素是在其他物体的后面还是前面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。
OpenGL渲染模块中顶点着色器和片段着色器需要自行定义。
开始绘制图形之前,必须先给OpenGL输入顶点数据,通过顶点缓存对象(VertextBuffer Objects,VBO)管理这个数据,它会在GPU的显存中存储大量顶点,使用这些缓存对象的好处是我们可以一次性发送一大批数据到显存中,而不是每个顶点发送一次,把数据从内存中发送到显存相对较慢,当数据发送到显存后,顶点着色器就能访问顶点数据,本地访问的速度非常快。分配大量数目的VBO(一个VBO的容量仅为千字节)可能会导致显卡驱动程序问题。有些驱动程序只能从显存中分配一定个数的VBO,而不管VBO的容量是多少,需要将较小的对象放在一个容量大的VBO中。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (9)
1.一种用于航电显控的三维数字地球构建方法,其特征在于:所述构建方法包括:
读取地形文件:采用GDAL库来读取加载地形文件,解析为地形数据后生成原始地形数据到内存中;
计算顶点数据:计算包括三维世界坐标、法线和纹理坐标的顶点属性并生成顶点属性数据;
传输顶点数据:计算空间大小并进行数据传输交互;
创建着色器:使用GLSL语言生成顶点着色器和片段着色器的源代码,并在GPU中创建对应的可执行逻辑单元;
渲染准备:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器;
渲染:调用绘图指令glDrawElements进行渲染,采用现代OpenGL渲染方法分别执行创建的顶点着色器和片段着色器,并将渲染结果输出到窗口中以显示三维数字地球。
2.根据权利要求1所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述计算顶点数据具体包括:
已知起始点的经纬度,根据顶点的二维坐标计算顶点的经纬度,顶点的高度值就是其二维坐标在栅格元数据中的值,然后参考相机中的世界坐标公式计算世界坐标;
根据当前顶点选取两个紧邻当前顶点的顶点,并计算两个顶点与当前顶点之间的向量,再将两个向量叉乘得到法向量;
根据生成的颜色表文件生成纹理,计算顶点的纹理坐标后进行纹理采用获取顶点颜色。
3.根据权利要求2所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述根据生成的颜色表文件生成纹理,计算顶点的纹理坐标后进行纹理采用获取顶点颜色具体包括:
通过第三方工具生成一维颜色表文件;
根据一维颜色表文件创建一维纹理,纹理的宽度表示颜色的总数,通过glTexImage1D函数将内存中纹理参数写入到显存中,OpenGL中纹理的坐标范围0到1之间,那么颜色表被将会映射到0-1之间的范围,纹理坐标0对应颜色表中第一个颜色,1则对应最后一个颜色;
输入当前顶点的高度值、最大高度值和最小高度值计算得到顶点的纹理坐标,实现将顶点的高度映射到0-1之间的范围,与显存中纹理坐标保持一致。
输入纹理的编号和顶点的纹理坐标在片段着色器中调用采样函数从纹理中获取到顶点颜色。
4.根据权利要求1所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述传输顶点数据具体包括:
计算空间大小,使用glGenBuffers创建一个VBO对象,设置VBO的类型为GL_ARRAY_BUFFER,VBO里面存放的是顶点数据,提供给顶点着色器使用,glBufferData函数将为当前绑定的VBO分配一块数据存储空间,将内存中的顶点数据写入到该空间中,glBufferData中的最后一个参数是GL_STATIC_DRAW,表示数据存储内容只被初始化一次,以利于GPU的空间分配。
5.根据权利要求4所述的一种用于航电显控的三维数字地球构建方法,其特征在于:如果VBO分配存储空间失败,则采用数据切分和复用的方式,将一大块数据切分呈多个容量相同的小块数据,然后将小块数据传输到显存中,最后进行渲染。
6.根据权利要求5所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述数据切分和复用的步骤包括:
设置单个数据块的容量为6MB,并根据数据块的容量计算出能够容纳的顶点行数;
根据顶点的总数计算出需要的数据块数量,并创建相同数量的VBO;
按照数据块容量分配内存空间,遍历顶点数组;
依次读取容纳行数的顶点、计算顶点和传输顶点。
7.根据权利要求1所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述创建着色器具体包括:
glGetShaderiv函数创建着色器程序,通过glShaderSource函数设置顶点着色器和片段着色器的源代码并根据glCompileShader函数编译源代码;
glAttachShader函数将顶点着色器和片段着色器绑定到着色器程序,并通过glLinProgram函数连接着色器程序。
8.根据权利要求1所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述渲染准备的具体包括:
通过glUseProgram函数运行着色器程序,启动着色器程序中的输入属性;
设置顶点着色器中对应的透视矩阵、观察矩阵和模型矩阵变量,设置片段着色器中对应的光照参数和纹理编号;
绑定VBO数据到显存中,并将解析的VBO数据传递给顶点着色器,顶点着色器将数据的结构与输入属性进行关联。
9.根据权利要求1所述的一种用于航电显控的三维数字地球构建方法,其特征在于:所述现代OpenGL渲染方法包括:
顶点着色器步骤:用于将以数组的形式传递输入的3个3D坐标转换为另一种3D坐标后输入到图元装配步骤;
图元装配步骤:用于将所有的点装配呈指定的图元形状后输入到几何着色器步骤;
几何着色器步骤:用于把图元形状的一系列顶点的几何作为输入,产生新顶点构造出新的图元来生成其它图元形状,并输入到光栅化步骤;
光栅化步骤:用于把图元映射为最终屏幕上相应的像素,生成供片段着色器单元使用的片段;
片段着色器步骤:用于根据包含的3D场景数据来计算一个像素的最终颜色
测试和混合步骤:用于检测片段的深度值和模板值,以用来判断像素的位置,以及检测alpha值并对物体进行混合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110881749.1A CN113593028A (zh) | 2021-08-02 | 2021-08-02 | 一种用于航电显控的三维数字地球构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110881749.1A CN113593028A (zh) | 2021-08-02 | 2021-08-02 | 一种用于航电显控的三维数字地球构建方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113593028A true CN113593028A (zh) | 2021-11-02 |
Family
ID=78253965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110881749.1A Pending CN113593028A (zh) | 2021-08-02 | 2021-08-02 | 一种用于航电显控的三维数字地球构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113593028A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114140593A (zh) * | 2021-12-02 | 2022-03-04 | 北京清晨动力科技有限公司 | 数字地球和全景图融合显示方法和装置 |
-
2021
- 2021-08-02 CN CN202110881749.1A patent/CN113593028A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114140593A (zh) * | 2021-12-02 | 2022-03-04 | 北京清晨动力科技有限公司 | 数字地球和全景图融合显示方法和装置 |
CN114140593B (zh) * | 2021-12-02 | 2022-06-14 | 北京清晨动力科技有限公司 | 数字地球和全景图融合显示方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3673463B1 (en) | Rendering an image from computer graphics using two rendering computing devices | |
US11024077B2 (en) | Global illumination calculation method and apparatus | |
US8115767B2 (en) | Computer graphics shadow volumes using hierarchical occlusion culling | |
US7598952B1 (en) | Three-dimensional image compositing on a GPU utilizing multiple transformations | |
CN108986195B (zh) | 一种结合环境映射和全局光照渲染的单镜头混合现实实现方法 | |
US8063902B2 (en) | Method and apparatus for increasing efficiency of transmission and/or storage of rays for parallelized ray intersection testing | |
US20100164983A1 (en) | Leveraging graphics processors to optimize rendering 2-d objects | |
US9208610B2 (en) | Alternate scene representations for optimizing rendering of computer graphics | |
US10665010B2 (en) | Graphics processing systems | |
JP2001118082A (ja) | 描画演算処理装置 | |
CN113593027B (zh) | 一种三维航电显控界面装置 | |
CN1655191A (zh) | 基于可编程图形硬件的多边形网格模型的快速体素化方法 | |
US10846908B2 (en) | Graphics processing apparatus based on hybrid GPU architecture | |
US11854141B2 (en) | Early release of resources in ray tracing hardware | |
GB2406252A (en) | Generation of texture maps for use in 3D computer graphics | |
WO2022086795A1 (en) | System and method for high quality renderings of synthetic views of custom products | |
CN114758051A (zh) | 一种图像渲染方法及其相关设备 | |
KR20180023856A (ko) | 그래픽 처리 시스템 및 그래픽 프로세서 | |
CN113593028A (zh) | 一种用于航电显控的三维数字地球构建方法 | |
US7116333B1 (en) | Data retrieval method and system | |
US7372461B2 (en) | Image processing apparatus and method of same | |
US7372466B2 (en) | Image processing apparatus and method of same | |
KR100624455B1 (ko) | 3차원 그래픽스 환경에서의 라이트맵 처리 방법 및 장치 | |
CN115496818B (zh) | 一种基于动态物体分割的语义图压缩方法和装置 | |
WO2023184139A1 (en) | Methods and systems for rendering three-dimensional scenes |
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 |