CN113593027B - 一种三维航电显控界面装置 - Google Patents
一种三维航电显控界面装置 Download PDFInfo
- Publication number
- CN113593027B CN113593027B CN202110880604.XA CN202110880604A CN113593027B CN 113593027 B CN113593027 B CN 113593027B CN 202110880604 A CN202110880604 A CN 202110880604A CN 113593027 B CN113593027 B CN 113593027B
- Authority
- CN
- China
- Prior art keywords
- dimensional
- vertex
- data
- camera
- 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.)
- Active
Links
- 238000009877 rendering Methods 0.000 claims abstract description 84
- 230000006870 function Effects 0.000 claims abstract description 32
- 238000012876 topography Methods 0.000 claims abstract description 5
- 239000013598 vector Substances 0.000 claims description 53
- 239000011159 matrix material Substances 0.000 claims description 41
- 239000012634 fragment Substances 0.000 claims description 33
- 238000000034 method Methods 0.000 claims description 30
- 230000009466 transformation Effects 0.000 claims description 17
- 239000003086 colorant Substances 0.000 claims description 9
- 238000010276 construction Methods 0.000 claims description 8
- 238000005070 sampling Methods 0.000 claims description 7
- 238000013500 data storage Methods 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 6
- 238000002156 mixing Methods 0.000 claims description 6
- 238000012360 testing method Methods 0.000 claims description 5
- 230000003993 interaction Effects 0.000 claims description 4
- 230000011218 segmentation Effects 0.000 claims description 4
- 230000009286 beneficial effect Effects 0.000 claims description 3
- 238000002360 preparation method Methods 0.000 claims description 3
- 238000003860 storage Methods 0.000 claims description 3
- 238000013461 design Methods 0.000 abstract description 5
- 230000000007 visual effect Effects 0.000 abstract description 3
- 230000008878 coupling Effects 0.000 abstract description 2
- 238000010168 coupling process Methods 0.000 abstract description 2
- 238000005859 coupling reaction Methods 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 11
- 238000005286 illumination Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000005520 cutting process Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000007142 ring opening reaction Methods 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000001962 electrophoresis Methods 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000004091 panning Methods 0.000 description 1
- 230000035939 shock Effects 0.000 description 1
- 108010047303 von Willebrand Factor Proteins 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2012—Colour editing, changing, or manipulating; Use of colour codes
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
Abstract
本发明涉及一种三维航电显控界面装置,它包括三维数字地球采用现代OpenGL渲染的方式生成三维地形,并通过三种不同观察视角实现对数字地球的旋转操作;三维图形组件用于提供多种类型的三维图形类型,并在三维数字地球中渲染显示;三维容器组件用于继承自VAPS XT的容器基类,使其具备挂载子节点的能力;三维模型组件用于通过lib3ds管理3ds文件,并通过显示列表的方式将需要绘制的部分放在显示列表glGenLists中,然后对该列表进行预编译。本发明通过三维全局相机控制、环境光控制、图形组件编辑控制,这三项功能在架构设计上被独立出来,形成三大统一的逻辑控制模块,实现了和三维图形组件直接的低耦合,高内聚。
Description
技术领域
本发明涉及航电显控技术领域,尤其涉及一种三维航电显控界面装置。
背景技术
显控界面是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。而航电显控系统作为航电系统的重要部分之一,其发展历程从最开始到现在分别经历了第一代飞机仪表、机电伺服仪表时期、综合指引仪表、CRT电光显示仪表和现代显控系统五个过程。
但是,目前主流的航电显控界面设计平台(例如:VAPS XT)只能提供二维显控界面的可视化开发功能,不具有三维视景的功能,而二维已经不能满足目前的战场态势的需要,因此,急需一种三维的航电显控界面装置。
发明内容
本发明的目的在于克服现有技术的缺点,提供了一种三维航电显控界面装置,解决了现有航电显控界面设计平台存在的不足。
本发明的目的通过以下技术方案来实现:一种三维航电显控界面装置,它包括三维数字地球、三维图形组件、三维容器组件和三维模型组件;
所述三维数字地球:用于通过采用现代OpenGL渲染的方式生成三维地形,并通过三种不同观察视角实现对数字地球的旋转操作;
所述三维图形组件:用于提供多种类型的三维图形类型,并在三维数字地球中渲染显示;
所述三维容器组件:用于继承自VAPS XT的容器基类,提供一些三维容器,使其具备挂载子节点的能力;
所述三维模型组件:用于通过lib3ds管理3ds文件,并通过显示列表的方式将需要绘制的部分放在显示列表glGenLists中,然后对该列表进行预编译。
所述三维数字地球包括现代OpenGL渲染模块、三维地形生成模块和三维全局相机控制器;
所述OpenGL渲染模块用来接收到一组3D坐标,然后转变为屏幕上的2D像素显示输出;
所述三维地形生成模块用于根据OpenGL渲染模块、纹理以及地形文件加载库GDAL,生成地形数据和渲染;
三维全局相机控制器用于通过支持自由视角、跟踪视角和地球视角三种不同的观察视角,并同时通过鼠标拖动操作绕任意过原点的向量对数字地球进行旋转操作。
所述现代OpenGL渲染模块包括:
顶点着色器单元:用于将以数组的形式传递输入的3个3D坐标转换为另一种3D坐标后输入到图元装配单元;
图元装配单元:用于将所有的点装配呈指定的图元形状后输入到几何着色器单元;
几何着色器单元:用于把图元形状的一系列顶点的几何作为输入,产生新顶点构造出新的图元来生成其它图元形状,并输入到光栅化单元;
光栅化单元:用于把图元映射为最终屏幕上相应的像素,生成供片段着色器单元使用的片段;
片段着色器单元:用于根据包含的3D场景数据来计算一个像素的最终颜色
测试和混合单元:用于检测片段的深度值和模板值,以用来判断像素的位置,以及检测alpha值并对物体进行混合。
三维地形渲染交互流程包括:
读取地形文件:CPU从磁盘加载地形文件解析为地形数据后生成原始地形数据到内存中;
计算顶点数据:计算包括三维世界坐标、法线和纹理坐标的顶点属性并生成顶点属性数据;
传输顶点数据:计算空间大小,使用glGenBuffers创建一个VBO对象,设置VBO的类型为GL_ARRAY_BUFFER,VBO里面存放的是顶点数据,提供给顶点着色器使用,glBufferData函数将为当前绑定的VBO分配一块数据存储空间,将内存中的顶点数据写入到该空间中,glBufferData中的最后一个参数是GL_STATIC_DRAW,表示数据存储内容只被初始化一次,以利于GPU的空间分配;
创建着色器:使用GLSL语言生成顶点着色器和片段着色器的源代码,并在GPU中创建对应的可执行逻辑单元;
渲染准备及渲染:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器,调用绘图指令glDrawElements进行渲染,OpenGL渲染模块分别执行顶点着色器和片段着色器,并将渲染结果输出到窗口中。
计算顶点数据包括:
A1、已知起始点的经纬度,根据顶点的二维坐标计算顶点的经纬度,顶点的高度值就是其二维坐标在栅格元数据中的值,然后参考相机中的世界坐标公式计算世界坐标;
A2、根据当前顶点选取两个紧邻当前顶点的顶点,并计算两个顶点与当前顶点之间的向量,再将两个向量叉乘得到法向量;
A3、计算顶点的纹理坐标包括:
通过第三方工具生成一维颜色表文件;
根据一维颜色表文件创建一维纹理,纹理的宽度表示颜色的总数,通过glTexImage1D函数将内存中纹理参数写入到显存中,OpenGL中纹理的坐标范围0到1之间,那么颜色表被将会映射到0-1之间的范围,纹理坐标0对应颜色表中第一个颜色,1则对应最后一个颜色;
输入当前顶点的高度值、最大高度值和最小高度值计算得到顶点的纹理坐标,实现将顶点的高度映射到0-1之间的范围,与显存中纹理坐标保持一致。
输入纹理的编号和顶点的纹理坐标在片段着色器中调用采样函数从纹理中获取到顶点颜色。
所述创建着色器包括:
glGetShaderiv函数创建着色器程序,通过glShaderSource函数设置顶点着色器和片段着色器的源代码并根据glCompileShader函数编译源代码;
glAttachShader函数将顶点着色器和片段着色器绑定到着色器程序,并通过glLinProgram函数连接着色器程序。
如果VBO分配存储空间失败,则采用数据切分和复用的方式,将一大块数据切分呈多个容量相同的小块数据,然后将小块数据传输到显存中,最后进行渲染。
所述数据切分和复用的步骤包括:
设置单个数据块的容量为6MB,并根据数据块的容量计算出能够容纳的顶点行数;
根据顶点的总数计算出需要的数据块数量,并创建相同数量的VBO;
按照数据块容量分配内存空间,遍历顶点数组;
依次读取容纳行数的顶点、计算顶点和传输顶点。
所述三维全局相机控制器的工作流程包括:
读取相机的地理位置和姿态参数,并判断当前相机视角;
如果是自由视角,则根据相机的地理位置计算相机在世界坐标系的位置,然后根据相机的姿态参数计算相机的视线方向和Up朝向,最后根据当前场景四元数对相机坐标系进行修正,得到挡墙视图矩阵;
如果是跟踪视角,则根据相机的地理位置计算相机在世界坐标系的位置,然后根据相机的姿态参数计算相机的视线方向和Up朝向,根据当前场景四元数对相机坐标系进行修正,得到挡墙视图矩阵,最后根据跟踪距离参数D将相机坐标系沿中心向量进行反方向平移D得到当前视图矩阵;
如果是地球视角,将相机的地理位置和姿态还原初始状态,将三维数字地球的状态还原到初始状态,然后构建单元四元数根据相机的地理位置和姿态信息对单位四元数进行更新计算,并最终赋予当前的场景四元数,最后根据南北极锁定算法,对相机坐标系进行修正,得到当前的视图矩阵。
所述三维容器组件包括地理位置容器、3D坐标变换容器、3D裁剪容器和3D实例构建容器;所述地理位置容器用于对子节点提供统一的地理位置属性,子节点可以访问地理位置容器的地理位置属性并应用;所述3D坐标换行容器用于对子节点提供统一的北西天三个方向的偏移、姿态和尺寸缩放控制;所述3D裁剪容器用于对子节点渲染位于矩形区域内的部分;所述3D实例构建容器用于对多个子节点实例进行构建。
本发明具有以下优点:
1、复用VAPS XT平台的基础组件,包括数据类型、数学库以及其他工具库;复用VAPS XT框架的图形节点结构管理,保持节点间的树状结构,方便节点间的通信;
2、基于VAPS XT平台的插件接口规范,与其保持框架上的统一性,保证和VAPS XT内置的逻辑设计模块、数据通信模块等进行无缝对接;
3、三维全局相机控制、环境光控制、图形组件编辑控制,这三项功能在架构设计上被独立出来,形成三大统一的逻辑控制模块,实现了和三维图形组件直接的低耦合,高内聚;
4、每个三维图形组件都是一个独立的插件,便于平行扩展及维护;同理:对每一种模型文件的加载解析实现,都是一个独立的逻辑组件,便于平行扩展及维护;
5、所扩展的二维图形组件包括多种包络图形组件(包络圆、包络扇形、包络极多边形),这三个包络组件基于统一的包络算法策略来实现。
附图说明
图1为本发明的框架结构示意图;
图2为数据传输流程示意图;
图3为数据切分和复用流程示意图;
图4为三维全集相机控制器的工作流程示意图;
图5为OpenGL矩阵变换顺序示意图;
图6为鼠标拖动操作流程图;
图7为基于四元数的旋转方法流程图;
图8为地球视角下相机和三维数字地球的初始状态示意图;
图9为地球视角下相机和三维数字地球的旋转后状态示意图;
图10为南北极锁定算法流程图;
图11为地球视角下相机和三维数字地球的修正后状态示意图;
图12为地理位置容器的实现流程图;
图13为3D坐标变换容器的实现流程图;
图14为二三维显示融合实现流程图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下结合附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的保护范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。下面结合附图对本发明做进一步的描述。
如图1所示,本发明涉及一种三维航电显控界面装置,其基于VAPS XT平台的插件接口规范,提供了三维图形开发平台,包括核心的三维数字地球、三维模型、三维容器和三维图形组件等等;同时提供了一系列二维图形组件。
进一步地,三维数字地球包括现代OpenGL渲染模块、三维地形生成模块和三维全局相机控制器。
现代OpenGL渲染模块:
其图形渲染管线接收一组3D坐标,然后把它们转变为屏幕上的2D像素显示输出。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。所有这些阶段都是高度专业化的(它们都有一个特定的函数),并且很容易并行执行。正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在GPU上为每个渲染阶段运行各自的小程序,从而在图形渲染管线中快速处理数据。这些小程序叫做着色器(shader)。
图形渲染管线包含很多部分,每个部分都将在转换顶点数据到最终像素这个过程中处理各自特定的阶段,本发明会概况性地解释管线的各个部分。
首先,以数组的形式传递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中。
三维地形模块:
三维地形使用OpenGL着色器、纹理技术以及地形文件加载库GDAL等,用来生成地形数据和渲染。其中,三维地形渲染交互流程包括:
S1、读取地形文件:CPU从磁盘加载地形文件解析为地形数据后生成原始地形数据到内存中;
具体为,采用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),在片段着色器中调用采样函数从纹理中获取到顶点颜色。
如图2所示,S3、传输顶点数据:计算空间大小,使用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;
按照数据块容量分配内存空间,遍历顶点数组;
依次读取容纳行数的顶点、计算顶点和传输顶点。
创建着色器:使用GLSL语言生成顶点着色器和片段着色器的源代码,并在GPU中创建对应的可执行逻辑单元;
渲染准备及渲染:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器,调用绘图指令glDrawElements进行渲染,OpenGL渲染模块分别执行顶点着色器和片段着色器,并将渲染结果输出到窗口中。
进一步地,S4、创建着色器包括:
glGetShaderiv函数创建着色器程序,通过glShaderSource函数设置顶点着色器和片段着色器的源代码并根据glCompileShader函数编译源代码;
glAttachShader函数将顶点着色器和片段着色器绑定到着色器程序,并通过glLinProgram函数连接着色器程序。
S5、渲染前准备及渲染,由于场景中需要改变观察的视角或者光照的位置等,所以在渲染前相应的参数传递给着色器。目前顶点着色器不知道VBO中数据的结构,将解析VBO数据的方式告知顶点着色器。调用绘图指令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)输出颜色。
三维全局相机控制器:
其支持三种不同的观察视角:自由视角(第一人称视角)、跟踪视角、地球视角;同时可通过鼠标拖动操作,绕任意过原点的向量对数字地球进行旋转操作。
自由视角(即:第一人称视角),指的是在基于三维数字地球的场景中实现任意自由度的观察视角,可自由设置相机的观察位置和相机的视线方向。其中相机的视线方向由两个姿态属性决定:相机水平偏转方向和俯仰方向。
跟踪视角:以指定的观察点作为相机的观察中心(通过相机的属性接口:地理位置,来指定观察中心点);相机的位置围绕观察中心按水平方向和俯仰方向进行旋转;且可以调节相机位置到观察中心的距离,从而通过不同的视角和距离对观察中心进行跟踪观察(典型的应用:对战斗机等模型进行跟踪观察)。
地球视角:地球视角是跟踪视角的一个特例,是以地球球心作为观察点的跟踪视角;在地球视角模式下,相机的地理位置和姿态存在的关系有:相机的经度(Long)和相机的水平偏转角度(Heading)保持一致、相机的纬度(Lat)和相机的俯仰角度(Pitch)保持一致。
如图4所示,三维全局相机控制器的工作流程包括:
读取相机的地理位置和姿态参数,并判断当前相机视角;
如果是自由视角,则根据相机的地理位置计算相机在世界坐标系的位置,然后根据相机的姿态参数计算相机的视线方向和Up朝向,最后根据当前场景四元数对相机坐标系进行修正,得到挡墙视图矩阵;
如果是跟踪视角,则根据相机的地理位置计算相机在世界坐标系的位置,然后根据相机的姿态参数计算相机的视线方向和Up朝向,根据当前场景四元数对相机坐标系进行修正,得到挡墙视图矩阵,最后根据跟踪距离参数D将相机坐标系沿中心向量进行反方向平移D得到当前视图矩阵;
如果是地球视角,将相机的地理位置和姿态还原初始状态,将三维数字地球的状态还原到初始状态,然后构建单元四元数根据相机的地理位置和姿态信息对单位四元数进行更新计算,并最终赋予当前的场景四元数,最后根据南北极锁定算法,对相机坐标系进行修正,得到当前的视图矩阵。
基于优化的坐标系转换算法,实现了球面坐标系和世界坐标系的相互转换,以支持:按经纬高来设置相机的观察位置;按经纬高来设置场景中的任意组件,包括:三维图形组件,三维模型组件,二维图形组件的三维扩展。
如图5所示,在OpenGL的渲染过程中,需要渲染的三维图形组件在3D空间中的所有点,依顺序经过一系列矩阵变换,转换形成2D图像并被渲染到屏幕上。OpenGL的矩阵变换顺序为:
1、物体坐标(Object Coordinates),就是物体的局部坐标系,在进行变换之前,它具有初始的位置和初始朝向。在OpenGL固定管线中,要对物体进行变换,通常是通过glRotatef()、glTranslatef()和glScalef()实现对物体的旋转、平移和缩放;也可通过glMultMatrix(const GLFloat quaternion[4][4]),对物体实现基于四元数的过原点任意向量进行选择。
2、视点坐标(Eye Coordinates)是通过模型视图矩阵(GL_MODELVIEW matrix)和物体坐标相乘得到的。即通过模型视图矩阵将物体空间转换到视点空间中。在OpenGL中,模型视图矩阵是模型矩阵(Mode)和视图(View)矩阵的结合(Mview·Mmodel),其中模型矩阵是将物体从物体空间变换到世界空间中,而视图矩阵是将世界空间变换到视点空间中。
3、裁剪坐标(Clip Coordinates):视点坐标再通过投影矩阵(GL_PROJECTIONmatrix)变换后就得到了裁切坐标。投影矩阵定义了视景体和顶点数据投影的方式(本项目采用透视投影)。该坐标系叫做裁切坐标的原因是变换后的顶点数据(x,y,z)通过和±w比较后,可能会有部分数据会被裁切。
4、归一化设备坐标(Normalized Device Coordinates)是将裁切坐标除以w(归一化系数)后得到的,该过程被称为透视除法(perspective division)。该坐标和窗口坐标或屏幕坐标相似,只是还没有平移和缩放到屏幕像素中。所有3坐标轴上数据范围全部被缩放到-1到1之间。
5、窗口坐标(Window Coordinates)是由NDC经过视口变换得到的。NDC通过平移和缩放刚好放入到渲染屏幕当中。在OpenGL管线中,窗口坐标随后会被传递到光栅化过程中,成为一个片元。glViewport()函数是用来设置渲染区域的范围的,glDepthRange()可以指定窗口坐标的z值。窗口坐标就是通过上述两个函数提供的数据计算得到的,如:glViewport(x,y,w,h)和glDepthRange(n,f)。
在OpenGL的矩阵变换过程中,其核心就在于4个矩阵变换,合起来叫MVPW矩阵,分别是:模型矩阵、视图矩阵、投影矩阵、窗口矩阵。
其中,如图6所示,可通过鼠标拖动操作,绕任意过原点的向量对数字地球进行旋转操作3D旋转是基于四元数而实现的,其操作流程如下:
1、鼠标右键的拖动过程,从右键的press开始,将响应鼠标的MousePress事件,此时读取并记录下光标的当前视口坐标位置:Viewport_Pos0;
2、在press之后,鼠标开始移动,直至拖动过程结束,在这个过程中,按时间轴会多次响应鼠标的MouseMove事件,共记为N次.可以将拖动开始时响应的MousePress事件,视为第0次MouseMove事件,那么后续的N次MouseMove事件,依次为:第1次MouseMove事件,……,第N次MouseMove事件。所以整个过程包含(N+1)次MouseMove事件;
3、在第i次响应MouseMove事件时(i大于等于0且i小于等于N),记录下光标的当前视口坐标位置:Viewport_Posi;
4、基于四元数的3D旋转算法核心,即在相邻的两次MouseMove事件之间进行实现,相邻的两次MouseMove事件分别为第i次,第j次(j=i+1,i>=0且j<=N)。
如图7所示,基于四元数的旋转方法包括:
1、将场景四元数初始化为单位四元数;
2、在第i次响应鼠标的MouseMove事件时,获取当前鼠标光标的视口位置坐标,记录为:ViewPort_Posi;
3、在第j次响应鼠标的MouseMove事件时(j=i+1),获取当前鼠标光标的视口位置坐标,记录为:ViewPort_Posj;
4、根据ViewPort_Posi和ViewPort_Posj,通过计算更新场景四元数,并重新渲染整个场景。
在平台运行过程中,存在一个全局唯一的四元数(场景四元数),在平台运行时,其初始化为单位四元数,场景四元数用于在每次渲染场景时,对场景中的所有三维图形组件(包括数字地球本身)的位置进行相应的矩阵变换,从而实现:整个场景可以随鼠标右键的拖动操作,绕“过原点(地球球心)的任意向量”进行任意角度旋转。
进一步地,S:三维数字地球的南极点,其在OpenGL世界坐标系中的坐标位置,被记为S;N:三维数字地球的北极点,其在OpenGL世界坐标系中的坐标位置,被记为N;SN向量:以三维数字地球的南极点S为起点,北极点N为终点的向量,被记为:SN向量。
南北极锁定为:在地球视角下,相机的Up向量,和三维数字地球的SN向量,当着两个向量存在一定的夹角时,需要将夹角修正为0,且这两个向量的方向保持一致,这个过程就叫:南北极锁定。
如图8和图9所示,三维数字地球的南极点S和北极点N分别位于OpenGL世界坐标系的Y轴的正向和负向,所以其SN向量和Y轴平行,且方向指向Y轴正向;相机坐标系的原点位于OpenGL世界坐标系的Z轴的正向,且Up向量和Y轴平行,且和Y轴正向同向,所以,在地球视角的初始状态下:相机的Up向量,和三维数字地球的SN向量平行,且同向,且夹角为0,此时不需要进行南北极锁定修正;由于在平台运行过程中,可通过鼠标拖动操作,绕任意过原点的向量对数字地球进行旋转操作(即:3D旋转),旋转后,SN向量可能和OpenGL世界坐标系Y轴向产生夹角;上图中,在拖动数字地球绕过原点的任意向量(比如图中的白色虚线所表示的向量)进行旋转后,数字地球的SN向量和OpenGL世界坐标系Y轴产生了一定的夹角;由于在地球视角下,相机坐标系的初始状态如图中所示(Up向量和OpenGL世界坐标系Y轴平行,且同向),所以:随着鼠标拖动对数字地球的任意旋转,相机的Up向量和SN向量可能产生夹角,需要相应的技术方案对齐进行修正,以确保南北极锁定。
如图10所示,南北极锁定的算法包括:
根据场景四元数,分别计算地球的南极点和北极点的世界坐标系位置;
根据地球的南极点和北极点的世界坐标系位置,计算SN向量,并计算SN向量在OpenGL世界坐标系的XoY平面的投影向量,记为:vProj_XoY;
计算投影向量vProj_XoY和OpenGL世界坐标系Y轴正向的夹角,记为γ;
对相机的点pUp、点pAm绕Center向量进行旋转,旋转角度为γ,通过计算更新pUp、pAm,最终得到视图矩阵,进而渲染当前帧。
如图11所示,SN向量在OpenGL世界坐标系中的XoY平面上的投影为vProj_XoY,其与Y轴的夹角为:γ;对相机坐标系绕Center向量旋转γ度,得到南北极锁定修正后的新相机坐标系,其Up向量和Arm向量分别为图中的:Up2、Arm2。
进一步地,平台提供了一系列三维容器组件,它们继承自VAPS XT的容器基类,使其具备挂载子节点的能力,包括:地理位置容器、3D坐标变换容器、3D实例容器。
其中,地理位置容器(Simple3dGroup),对其子节点提供统一的地理位置属性。子节点可访问地理位置容器的地理位置属性并应用。
如图12所示,地理位置容器实现的步骤包括:
三维图形组件(控件)获取父节点指针,记为pParent,并判断pParent是否是Simple3dGroup;
如果是,则从父节点中读取地理位置数据(经度、纬度、高度),作为当前三维图形组件的地理位置属性,记为LLA;
如果不是,则从三维图形组件本身的属性接口读取地理位置数据,作为当前三维图形组件的地理位置属性,记为LLA;
根据三维图形组件的地理位置属性,计算其在OpenGL世界坐标系中的位置。
其中,3D坐标变换容器(Transform3dGroup),对其子节点提供统一的北西天三个方向的偏移、姿态和尺寸缩放控制(统称:transform数据)。
如图13所示,3D坐标变换容器下的子节点获取并应用transform数据的实现流程包括:
三维图形组件(控件)获取父节点指针,记为pParent,获取pParent的父节点指针,记为pParent2,并判断pParent2是否是Simple3dGroup;
如果是,则从pParent2节点中读取地理位置数据(经度、纬度、高度),作为当前三维图形组件的地理位置属性,记为LLA;
如果不是,则从三维图形组件本身的属性接口读取地理位置数据,作为当前三维图形组件的地理位置属性,记为LLA;
根据三维图形组件的地理位置属性,计算其在OpenGL世界坐标系中的位置,记为:curPos,并判断pParent是否是Transform3dGroup;
如果是,则从pParent点中获取Transform数据,作为当前三维图形组件的Transform数据;
如果不是,则根据三维图形组件的Transform属性接口中读取的Transform数据,作为当前三维图形组件的Transform数据;
根据三维图形组件Transform数据中的北西天三个方向的偏移值,对curPos进行修正,并根据三维图形组件Transform数据中的姿态值,对三维图形组件进行相应的旋转;
根据三维图形组件Transform数据中的尺寸缩放值,对三维图形组件进行相应的缩放。
3D裁剪容器(ClippingRegion3d),定义了一个矩形区域,对其子节点只渲染位于矩形区域内的部分,其余部分则不会显示。
裁剪容器的实现步骤包括:调用OpenGL接口:glEnable(GL_Scissor_TEST)进入裁剪渲染模式;然后电泳OpenGL接口:glScissor(x,y,w,h),确定裁剪范围;按深度遍历的顺序,依次渲染裁剪容器下挂载的各个组件;最后调用OpenGL接口glDisable(GL_Scissor_TEST),退出裁剪渲染模式。
3D实例构建容器(Instance3dGroup),对其多个子节点实例构建功能;其实现步骤包括:通过3d实例构建容器的属性接口指定实例类型,通过3d实例构建容器的属性接口指定实例个数,按指定的类型和个数依次渲染各个实例。
三维模型组件:
采用lib3ds库,其是一个用管理3ds文件的完整软件库,可以替代Autodesk的3DS文件工具包,用于管理3DS文件;为了提高渲染效率,采用显示列表的方式,将需要绘制的部分放在显示列表glGenLists中,然后对该列表进行预编译。当需要显示时,直接调用显示列表,由于已经经过了预编译,可以直接显示,从而提高效率。
三维图形组件:
本发明可提供多种类型的三维图形组件类型,以创建具体的三维图形组件实例。包括球面罩、多段墙体、视椎体、扫描面、贴地圆环等。同时还包括VAPS XT平台内置二维图形组件的三维扩展。所有三维图形组件均提供地理位置属性、姿态属性,使用和VAPS XT相同的颜色属性、画笔属性。
球面罩(SphereCover),用于表征场景中的某一覆盖范围。其具有半径、水平方向跨度范围、垂直方向跨度范围、颜色、透明度、网格的显隐等属性。其渲染流程为:
通过相应标识判断渲染当前帧之前是否需要更新顶点数据集,如果是,则更新顶点数据集,然后根据球面罩的当前地理位置(包括地理位置容器父节点或自身属性接口)计算得到其模型矩阵,如果不是,则直接根据球面罩的当前地理位置(包括地理位置容器父节点或自身属性接口)计算得到其模型矩阵;
根据球面罩的当前Transform数据计算更新其模型矩阵,并判断当前是否需要渲染网络;
如果是,则更加球面罩的顶点数据集,渲染球面罩的网格,并根据球面罩的顶点数据集渲染球面罩的surface,如果不是,则直接根据球面罩的顶点数据集渲染球面罩的surface。
多段墙体(MultiSectionWall),用于表征战场态势的电子围栏等军事要素。具有墙段起点位置集、墙段高度、颜色、透明度等属性。其渲染流程为:
通过相应标识判断渲染当前帧之前是否需要更新顶点数据集,如果是,根据每段墙的起点和终点的经纬位置,计算其在OpenGL世界坐标系中的位置,记为PosSet;读取墙体的高度数据,记为:Height;根据PosSet和Height更新顶点数据集;判断是否需要渲染边框,如果需要渲染边框,则根据多段墙体的顶点数据集渲染边框,然后根据多段墙体的顶点数据集,渲染其surface,如果不需,则直接根据多段墙体的顶点数据集,渲染其surface;
如果不是,则直接判断是否需要渲染边框,然后进行相应后面的步骤。
视椎体(Frustum),用于表征战场态势的激光扫描等军事要素。具有位置、姿态、张角、高宽比、远裁界面、进裁截面等属性。其渲染流程与球面罩类似,此处不再赘述。
扫描面(ScanFace),用于表征战场态势的扫描范围等军事要素。具有位置、扫描角度、扫描范围角度等属性。其渲染流程与球面罩类似,此处不再赘述。
贴地圆环(GradientCircle),用于表征战场态势的地面冲击波等军事要素。具有地理位置、外圆环张角、内圆环张角等属性。其渲染流程包括:
通过相应标识判断渲染当前帧之前是否需要更新顶点数据集,如果是,则更新顶点数据集,并根据贴地圆环的当前地理位置,计算得到其模型矩阵;如果不是,则直接根据贴地圆环的当前地理位置,计算得到其模型矩阵;
然后根据贴地圆环的顶点数据集进行渲染。
本发明还包括二维图形组件及算法组件,在VAPS XT平台已有的二维图形组件的基础上,基于其插件框架,扩展了若干二维图形组件,以更好的满足现代航电二维显控界面的开发需求。所扩展的二维图形组件包括包络圆、包络扇形、包络极多边形,渐变多段线、等距多边形。其中三个包络组件基于统一的包络算法策略。
如图14所示,还包括二三维显示融合,支持二维图形组件和三维图形组件同时显示,兼容VAPS XT的图形组件的显示。二维图形组件采用正射投影的方式进行渲染,而三维图形组件采用透视投影的方式渲染,可以达到兼容显示的效果。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (8)
1.一种三维航电显控界面装置,其特征在于:它包括三维数字地球、三维图形组件、三维容器组件和三维模型组件;
所述三维数字地球:用于通过采用现代OpenGL渲染的方式生成三维地形,并通过三种不同观察视角实现对数字地球的旋转操作;
所述三维图形组件:用于提供多种类型的三维图形类型,并在三维数字地球中渲染显示;
所述三维容器组件:用于继承自VAPS XT的容器基类,提供一些三维容器,使其具备挂载子节点的能力;
所述三维模型组件:用于通过lib3ds管理3ds文件,并通过显示列表的方式将需要绘制的部分放在显示列表glGenLists中,然后对该列表进行预编译;
所述三维数字地球包括现代OpenGL渲染模块、三维地形生成模块和三维全局相机控制器;
所述OpenGL渲染模块用来接收到一组3D坐标,然后转变为屏幕上的2D像素显示输出;
所述三维地形生成模块用于根据OpenGL渲染模块、纹理以及地形文件加载库GDAL,生成地形数据和渲染;
三维全局相机控制器用于通过支持自由视角、跟踪视角和地球视角三种不同的观察视角,并同时通过鼠标拖动操作绕任意过原点的向量对数字地球进行旋转操作;
所述三维全局相机控制器的工作流程包括:
读取相机的地理位置和姿态参数,并判断当前相机视角;
如果是自由视角,则根据相机的地理位置计算相机在世界坐标系的位置,然后根据相机的姿态参数计算相机的视线方向和Up朝向,最后根据当前场景四元数对相机坐标系进行修正,得到当前视图矩阵;
如果是跟踪视角,则根据相机的地理位置计算相机在世界坐标系的位置,然后根据相机的姿态参数计算相机的视线方向和Up朝向,根据当前场景四元数对相机坐标系进行修正,得到挡墙视图矩阵,最后根据跟踪距离参数D将相机坐标系沿中心向量进行反方向平移D得到当前视图矩阵;
如果是地球视角,将相机的地理位置和姿态还原初始状态,将三维数字地球的状态还原到初始状态,然后构建单元四元数根据相机的地理位置和姿态信息对单位四元数进行更新计算,并最终赋予当前的场景四元数,最后根据南北极锁定算法,对相机坐标系进行修正,得到当前的视图矩阵;
南北极锁定的算法包括:
根据场景四元数,分别计算地球的南极点和北极点的世界坐标系位置;
根据地球的南极点和北极点的世界坐标系位置,计算SN向量,并计算SN向量在OpenGL世界坐标系的XoY平面的投影向量,记为:vProj_XoY;
计算投影向量vProj_XoY和OpenGL世界坐标系Y轴正向的夹角,记为γ;
对相机的点pUp、点pAm绕Center向量进行旋转,旋转角度为γ,通过计算更新pUp、pAm,最终得到视图矩阵,进而渲染当前帧。
2.根据权利要求1所述的一种三维航电显控界面装置,其特征在于:所述现代OpenGL渲染模块包括:
顶点着色器单元:用于将以数组的形式传递输入的3个3D坐标转换为另一种3D坐标后输入到图元装配单元;
图元装配单元:用于将所有的点装配成指定的图元形状后输入到几何着色器单元;
几何着色器单元:用于把图元形状的一系列顶点的几何作为输入,产生新顶点构造出新的图元来生成其它图元形状,并输入到光栅化单元;
光栅化单元:用于把图元映射为最终屏幕上相应的像素,生成供片段着色器单元使用的片段;
片段着色器单元:用于根据包含的3D场景数据来计算一个像素的最终颜色;
测试和混合单元:用于检测片段的深度值和模板值,以用来判断像素的位置,以及检测alpha值并对物体进行混合。
3.根据权利要求2所述的一种三维航电显控界面装置,其特征在于:三维地形渲染交互流程包括:
读取地形文件:CPU从磁盘加载地形文件解析为地形数据后生成原始地形数据到内存中;
计算顶点数据:计算包括三维世界坐标、法线和纹理坐标的顶点属性并生成顶点属性数据;
传输顶点数据:计算空间大小,使用glGenBuffers创建一个VBO对象,设置VBO的类型为GL_ARRAY_BUFFER, VBO里面存放的是顶点数据,提供给顶点着色器使用,glBufferData函数将为当前绑定的VBO分配一块数据存储空间,将内存中的顶点数据写入到该空间中,glBufferData中的最后一个参数是GL_STATIC_DRAW,表示数据存储内容只被初始化一次,以利于GPU的空间分配;
创建着色器:使用GLSL语言生成顶点着色器和片段着色器的源代码,并在GPU中创建对应的可执行逻辑单元;
渲染准备及渲染:在渲染前将相应的参数传递给着色器,并将解析的VBO数据传递给顶点着色器,调用绘图指令glDrawElements进行渲染,OpenGL渲染模块分别执行顶点着色器和片段着色器,并将渲染结果输出到窗口中。
4.根据权利要求3所述的一种三维航电显控界面装置,其特征在于:计算顶点数据包括:
A1、已知起始点的经纬度,根据顶点的二维坐标计算顶点的经纬度,顶点的高度值就是其二维坐标在栅格元数据中的值,然后参考相机中的世界坐标公式计算世界坐标;
A2、根据当前顶点选取两个紧邻当前顶点的顶点,并计算两个顶点与当前顶点之间的向量,再将两个向量叉乘得到法向量;
A3、计算顶点的纹理坐标包括:
通过第三方工具生成一维颜色表文件;
根据一维颜色表文件创建一维纹理,纹理的宽度表示颜色的总数,通过glTexImage1D函数将内存中纹理参数写入到显存中,OpenGL中纹理的坐标范围0到1之间,那么颜色表被将会映射到0-1之间的范围,纹理坐标0对应颜色表中第一个颜色,1则对应最后一个颜色;
输入当前顶点的高度值、最大高度值和最小高度值计算得到顶点的纹理坐标,实现将顶点的高度映射到0-1之间的范围,与显存中纹理坐标保持一致;
输入纹理的编号和顶点的纹理坐标在片段着色器中调用采样函数从纹理中获取到顶点颜色。
5.根据权利要求3所述的一种三维航电显控界面装置,其特征在于:所述创建着色器包括:
glGetShaderiv函数创建着色器程序,通过glShaderSource函数设置顶点着色器和片段着色器的源代码并根据glCompileShader函数编译源代码;
glAttachShader函数将顶点着色器和片段着色器绑定到着色器程序,并通过glLinProgram函数连接着色器程序。
6.根据权利要求3所述的一种三维航电显控界面装置,其特征在于:如果VBO分配存储空间失败,则采用数据切分和复用的方式,将一大块数据切分呈多个容量相同的小块数据,然后将小块数据传输到显存中,最后进行渲染。
7.根据权利要求6所述的一种三维航电显控界面装置,其特征在于:所述数据切分和复用的步骤包括:
设置单个数据块的容量为6MB,并根据数据块的容量计算出能够容纳的顶点行数;
根据顶点的总数计算出需要的数据块数量,并创建相同数量的VBO;
按照数据块容量分配内存空间,遍历顶点数组;
依次读取容纳行数的顶点、计算顶点和传输顶点。
8.根据权利要求1所述的一种三维航电显控界面装置,其特征在于:所述三维容器组件包括地理位置容器、3D坐标变换容器、3D裁剪容器和3D实例构建容器;所述地理位置容器用于对子节点提供统一的地理位置属性,子节点访问地理位置容器的地理位置属性并应用;所述3D坐标换行容器用于对子节点提供统一的北西天三个方向的偏移、姿态和尺寸缩放控制;所述3D裁剪容器用于对子节点渲染位于矩形区域内的部分;所述3D实例构建容器用于对多个子节点实例进行构建。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110880604.XA CN113593027B (zh) | 2021-08-02 | 2021-08-02 | 一种三维航电显控界面装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110880604.XA CN113593027B (zh) | 2021-08-02 | 2021-08-02 | 一种三维航电显控界面装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113593027A CN113593027A (zh) | 2021-11-02 |
CN113593027B true CN113593027B (zh) | 2024-01-02 |
Family
ID=78253692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110880604.XA Active CN113593027B (zh) | 2021-08-02 | 2021-08-02 | 一种三维航电显控界面装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113593027B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168049B (zh) * | 2021-11-29 | 2024-07-19 | 扬州中远海运重工有限公司 | 一种造船组立定盘管理交互控件 |
CN114140593B (zh) * | 2021-12-02 | 2022-06-14 | 北京清晨动力科技有限公司 | 数字地球和全景图融合显示方法和装置 |
CN114418992B (zh) * | 2022-01-19 | 2025-06-17 | 安徽大学 | 一种交互式2d与3d医学图像配准参数自动生成方法 |
CN114387367B (zh) * | 2022-03-22 | 2022-06-10 | 南京天朗防务科技有限公司 | 雷达航迹显示方法、装置 |
CN114924702A (zh) * | 2022-05-12 | 2022-08-19 | 北京力拓飞远科技有限公司 | 图形显示方法、系统及存储介质 |
CN116630510B (zh) * | 2023-05-24 | 2024-01-26 | 浪潮智慧科技有限公司 | 一种有关圆锥渐变纹理的生成方法、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214368A (zh) * | 2010-04-07 | 2011-10-12 | 北京国遥新天地信息技术有限公司 | 三维全尺度数字地球的实现方法 |
CN108197325A (zh) * | 2018-02-06 | 2018-06-22 | 覃睿 | 一种虚拟三维实景空中观光游览应用方法与系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140267273A1 (en) * | 2013-03-15 | 2014-09-18 | Janne Kontkanen | System and method for overlaying two-dimensional map elements over terrain geometry |
CN113409433B (zh) * | 2021-06-11 | 2023-10-17 | 东北大学 | 一种基于移动终端的医学三维模型显示和切割系统 |
-
2021
- 2021-08-02 CN CN202110880604.XA patent/CN113593027B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214368A (zh) * | 2010-04-07 | 2011-10-12 | 北京国遥新天地信息技术有限公司 | 三维全尺度数字地球的实现方法 |
CN108197325A (zh) * | 2018-02-06 | 2018-06-22 | 覃睿 | 一种虚拟三维实景空中观光游览应用方法与系统 |
Non-Patent Citations (3)
Title |
---|
基于 OpenGL三维地形实时交互显示的实现;沈正军;《淮海工学院学报(自然科学版)》;第15卷(第3期);第66-69页 * |
空基电子系统三维显控框架设计与实现;靳慧亮等;《计算机技术与发展》;第27卷(第4期);第161-163、169页 * |
航天器编队飞行多目标姿态快速跟踪鲁棒控制;袁长清等;《应用数学和力学》;第29卷(第2期);第169-180页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113593027A (zh) | 2021-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113593027B (zh) | 一种三维航电显控界面装置 | |
US12347016B2 (en) | Image rendering method and apparatus, device, medium, and computer program product | |
US8115767B2 (en) | Computer graphics shadow volumes using hierarchical occlusion culling | |
US8665266B2 (en) | Global visualization process terrain database builder | |
US6268862B1 (en) | Three dimensional virtual space generation by fusing images | |
US7027046B2 (en) | Method, system, and computer program product for visibility culling of terrain | |
US20090237396A1 (en) | System and method for correlating and synchronizing a three-dimensional site model and two-dimensional imagery | |
US6556195B1 (en) | Image processing device and image processing method | |
CN113593028B (zh) | 一种用于航电显控的三维数字地球构建方法 | |
US7098915B2 (en) | System and method for determining line-of-sight volume for a specified point | |
JPH0757117A (ja) | テクスチャマップへの索引を生成する方法及びコンピュータ制御表示システム | |
CZ273297A3 (cs) | Počítačový grafický systém pro vytváření a zlepšování map, vztahujících se ke třírozměrným modelům | |
US9401044B1 (en) | Method for conformal visualization | |
US20090153555A1 (en) | System and Computer-Implemented Method for Modeling the Three-Dimensional Shape of An Object by Shading of a Two-Dimensional Image of the Object | |
US10846908B2 (en) | Graphics processing apparatus based on hybrid GPU architecture | |
US6724383B1 (en) | System and computer-implemented method for modeling the three-dimensional shape of an object by shading of a two-dimensional image of the object | |
JP2007066064A (ja) | 画像生成装置及びプログラム | |
CN116993894B (zh) | 虚拟画面的生成方法、装置、设备、存储介质及程序产品 | |
US7116333B1 (en) | Data retrieval method and system | |
Frommholz et al. | Inlining 3d reconstruction, multi-source texture mapping and semantic analysis using oblique aerial imagery | |
JP6487578B1 (ja) | プログラム、記録媒体、及び影描画方法 | |
JP2548742B2 (ja) | 3次元シーン表示装置 | |
House | Overview of three-dimensional computer graphics | |
JPH1027268A (ja) | 画像処理方法及び画像処理装置 | |
AU744983B2 (en) | System and computer-implemented method for modeling the three-dimensional shape of an object by shading of two-dimensional image of the object |
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 |