本发明属于高速道路网三维视景构建,具体涉及一种基于opengl的高速公路数字孪生引擎。
背景技术:
1、三维视景是高速道路交通仿真中的重要部分。驾驶模拟视景系统,道路交通事故再现等均要构建城市道路三维视景。
2、在视景建模方面,autocad具有强大的二维建模功能,但用于道路网三维视景的构建效率较低,数据输出后需转换才可以使用。3dsmax建模功能强大,适合于对象的精细建模,虽然可以渲染出照片级质量的完美作品,但其建模数据量庞大,与高速道路网三维视景实时渲染要求有一定差距。
3、可视化仿真建模软件multigencreator中有一个标准道路建模模块,通过中心线(直线、平曲线、纵坡和竖曲线组合)的构造可以生成三维模型路段数据,但是对于以上的三维仿真软件来说,路网的构建要耗费大量时间,而且难以构建交叉口、立交桥等复杂城市道路视景数据。
技术实现思路
1、为了克服上述现有技术存在的不足,本发明提供了一种基于opengl的高速公路数字孪生引擎。
2、为了实现上述目的,本发明提供如下技术方案:
3、一种基于opengl的高速公路数字孪生引擎,包括:
4、仿真数据库读取模块,用于从外部路网数据库中读取道路gps点的信息;
5、道路数据处理模块,用于定义道路gps点的精细度,根据gps点的精细度对相邻的道路gps点进行线性插值运算,生成总路网gps点信息;
6、道路仿真模块,用于根据总路网gps点信息,绘制道路的三维虚拟模型;
7、交通设施数据处理模块,用于从交通设施数据库中读取交通设施的信息,建立交通设施分布表;
8、交通设施仿真模块,用于提取交通设施分布表中的交通设施的特征,绘制交通设施模型;
9、合成模块,用于将交通设施模型添加到道路的虚拟模型中,实现高速道路网三维视景的构建。
10、进一步,所述对相邻的道路gps点进行线性插值运算,包括:
11、确定两个相邻的gps点之间的向量a;
12、利用所设置的gps点的精细度对向量a进行归一化,计算方法为:
13、a1=normalize(a)
14、对a1进行插值得到插值后的向量b:
15、b=a1*a
16、利用插值后的向量b得到插值后的gps点p0:
17、p0=p1*b
18、其中,p1表示插值前的gps点,p0为插值后的gps点。
19、进一步,所述读取交通设施数据库中的信息中,当读取的信息为可变标志时,读取步骤包括:
20、读取可变标志的内容、可变标志的类型、可变标志的宽度、可变标志的高度、可变标志的经纬度和高度信息;
21、对信息进行过滤,如果满足:提示信息>预置提示信息数或可变标志的类型>预置可变标志类型数或可变标志的经纬度和高度>交通仿真场景中的电子围栏范围;则滤除。
22、进一步,还包括:定义可变标志的信息的结构体;将读取到的可变标志信息保存在可变标志的信息的结构体中;所述可变标志的信息的结构体为:
23、struct kbbzinfo
24、{
25、float x;
26、float y;
27、float z;
28、dword type;
29、float wid;
30、float hei;
31、}
32、其中,kbbzinfo为可变标志信息的结构体,其中,x表示可变标志的经度,y表示可变标志的纬度,z表示可变标志的高度,wid表示可变标志的宽度,hei表示可变标志的高度。
33、进一步,所述总路网gps点信息为:
34、struct zgps
35、{
36、int n;
37、float x[100];
38、float y[100];
39、float z[100];
40、}
41、其中,zgps为总路网gps点信息的结构体,n为插值后有效的gps点数量,x,y,z分别为每一个gps点的经度、纬度和高度。
42、进一步,所述根据总路网gps点信息,利用opengl绘制道路的三维虚拟模型,包括:
43、从zgps结构中读取每一个路面gps点的的x,y和z信息后,使用如下的opengl代码绘制路面:
44、for(int i=0;i<n;i++)
45、{
46、glbebin(gl_points);
47、glvertex(x,y,z);
48、glend();
49、}
50、其中:
51、for(int i=0;i<n;i++)表示从0开始到n,共绘制n次;
52、glbebin(gl_points)表示开始绘制模型;
53、glvertex(x,y,z)指定模型的顶点;
54、glend()表示停止绘制。
55、进一步,所述读取交通设施数据库中的信息,包括:
56、使用opengl系统中的读取库函数loadmod函数从交通设施数据库中读取模型的路径,并分配相应的内存空间;
57、使用opengl系统中的读取库函数loadmtl函数读取模型材质的路径,同时分配相应的内存空间;
58、读取内容使用opengl系统中的读取库函数loadcontext函数读取模型的内容的路径,同时分配相应的内容空间。
59、进一步,所述提取交通设施分布表中的交通设施的特征,利用opengl绘制交通设施模型;包括:
60、交通设施分布表为:
61、struct zkbbz
62、{
63、int n;
64、float x[100];
65、float y[100];
66、float z[100];
67、char* mod[100];
68、char* mtl[100];
69、char* nr[100];
70、}
71、将数据库文件中x,y,z存入zkbbz中的x[100],y[100],z[100]后,将模型的路径存入mod[100]中,材质的路径存入mtl[100]中,将内容的路径存入nr[100]中;
72、使用如下的opengl代码绘制此交通目标模型:
73、for(int i=0;i<n;i++)
74、{
75、glbebin(gl_triangles);
76、glvertex(x[0],y[0],z[0]);
77、glvertex(x[1],y[1],z[1]);
78、glvertex(x[2],y[2],z[2]);
79、glend();
80、}
81、在此代码中:
82、for(int i=0;i<n;i++)表示从0开始到n;
83、需要绘制n次的基本元素;
84、glbebin(gl_triangles)表示开始绘制模型;
85、glvertex(x[0],y[0],z[0])指定了模型的顶点x[0],y[0],z[0];
86、glvertex(x[1],y[1],z[1])指定了模型的顶点x[1],y[1],z[1];
87、glvertex(x[2],y[2],z[2])指定了模型的顶点x[2],y[2],z[2];
88、glend()表示停止绘制。
89、进一步,还包括:
90、调用opengl中的showrealmtl()函数加载此模型的材质mtl;
91、材质mtl加载完成后,调用opengl中的showmodcontext()函数加载模型的自定义内容。
92、本发明提供的一种基于opengl的高速公路数字孪生引擎具有以下有益效果:
93、本发明通过插值拟合算法自动生成生成总路网gps点信息,随后根据生成总路网gps点信息绘制道路的三维虚拟模型,最后在道路的三维虚拟模型中根据模型位置放置交通标志等交通设施。对于高速交通设施,采用特征提取的方式从交通设施分布表中提取特征并生成稳定的、健全的交通模型。本发明可靠性高,生成速度快,通用性好。解决了现有技术中对路网的构建要耗费大量时间,而且难以构建交叉口、立交桥等复杂城市道路视景数据的问题。