具体实施方式
为便于理解本发明,下面将结合附图进行阐述。
本发明中,LOD(Levels of Detail,层次细节模型)。
首先介绍本发明的方法,本发明公开的一种三维模型绘制方法请参考图1,包括步骤:
101、对显示数据进行视窗裁剪;
对显示的图像数据进行视窗裁剪,获得与不同视点高度、不同经纬度跨度对应的图像数据。
在本实施方式中,调节视窗的视点高度、变换经纬度跨度,获得不同视景体;对在视景体内的图像显示数据进行裁剪,获得不同视点高度、不同经纬度对应的图像数据;其中,视景体是指成像景物所在空间的集合。其优选实施方式,请参照图2至图5。
图2中,视窗内的视点高度为R1,中心经度为16,中心纬度为30,经裁剪后得到如图2所示的图像数据,包括物体A,其中物体A包括物体B、物体C以及物体D;在这种视点高度和经纬度跨度下,只看到图2所示的粗略图像,获取此时视窗内的图像数据;
调节视点高度,调为R2,并变换中心经度为15,中心纬度为30,得到如图3所示的视景图,此时,视窗内只看到物体B,以及物体B中包含的物体a、物体b、物体c、物体d以及物体e;获取此时视窗内的图像数据;此时的图像数据为精细的图像数据;
调节视点高度,调为R3,并变换中心经度为16,中心纬度为30,得到如图4所示的视景图,此时视窗内只看到物体C以及物体C中包括的物体1、物体2、物体3、物体4以及物体5;获取此时视窗内的图像数据;此时的图像数据为精细的图像数据;
调节视点高度,调为R4,并变换中心经度为17,中心纬度为30,得到如图5所示的视景图,此时视窗内只看到物体D以及物体D中包括的物体6、物体7、物体8、物体9以及物体10;获取此时视窗内的图像数据;此时的图像数据为精细的图像数据。
102、对视窗裁剪获得数据进行分块;
根据不同视点高度、经纬度跨度将对应的图像数据划分成若干数据块。
作为一种优选实施方式,将与预设视点高度、经纬度跨度对应的图像数据划分成一个层次的数据块,根据不同的预设视点高度、经纬度跨度将图像数据细分成不同层次的数据块;例如:将视点高度为50米至100米的,经度跨度为0.368度、纬度跨度为0.368度的图像数据归为一个数据块;将视点高度为30米至50米的,经度跨度为0.092度、纬度跨度为0.092度的图像数据归为一个数据块;将视点高度为0米至30米的,经度跨度为0.023度、纬度跨度为0.023度的图像数据归为一个数据块。
103、对数据块进行层次细节处理,得到三维模型;
对每个数据块进行层次细节处理,为每个数据块构建若干与该数据块层次对应的三维实体模型。
层次细节处理可采用LOD技术实现,LOD技术在不影响画面视觉效果的条件下,通过逐次简化景物的表面细节来减少场景的几何复杂性。LOD技术是现有技术,为便于理解在此重新介绍相关实现过程:
首先,简化数据块内的细节;一类是侧重于去掉那些不需要用图形显示硬件绘制的细节。一类是去掉那些无法用图形硬件绘制的细节,如基于距离和物体尺寸标准的方法。另一类是去掉那些人类视觉觉察不到的细节,如基于偏心率,视野深度,等标准的方法。
然后根据简化后的数据块,定义数据结构;设计LOD算法;
进行裂缝修补:当绘制节点时,相邻不同分辨率节点间会产生T型裂缝,可在两种不同分辨率节点之间加上一条边或是在不同分辨率格网之间减去一条边;
最后得到三维模型。视点高度高,经纬度跨度大,每个数据块内的三维模型个数多,数据块内的三维模型的精细程度低,即是三维模型的内容粗糙,只能看到大体轮廓;视点高度低,经纬度跨度小,每个数据块内的三维模型个数少,每个数据块内的三维模型的精细程度高,即是三维模型的内容详细,只能看到细微的纹理。
104、以块为单位绘制三维模型。
绘制每个数据块对应的三维实体模型。
作为一个优选方法,绘制时,采用DirectX 3D(简称D3D)技术进行绘制,D3D技术指是一种3D加速技术,支持场景数据优化、加速贴图显示(需得到显示卡的支持),场景透视修正。D3D渲染管线技术,就是利用一种类似过滤器的实现方法把3D世界模型转换成屏幕像素显示。最基本的D3D渲染过程包含这以下步骤:
1、世界坐标变换:把3D世界中的各种物体,通过缩放、旋转、平移放置到一个指定的位置;
2、摄像机变换:将3D世界的物体坐标转换为眼睛看到的坐标。
3、透视变换:为了制造出近大远小的感觉效果。
4、剪切:忽略看不到的对象,这样可以节省很多计算量,也可以使得计算的结果有一个确定的范围。实际的剪切变换中,还有近平面,远平面等参数,就是最近能看到多近,最远能看多远。
5、行扫描输出:把模型三角形中的每一个点的坐标都计算出来(在之前的处理中始终只保留其顶点),然后根据X,Y坐标(同时要判断点的前后)画到屏幕上。
也可使用另一种优选绘制方法,即采用OpenGL(Open Graphics Library,开放式图形库),OpenGL定义了一个跨编程语言、跨平台的编程接口的规格,它可用于三维图象绘制(二维的亦可)。OpenGL是个功能强大,调用方便的底层图形库。
OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:
1、建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数;
2、变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法有利于减少算法的运行时间,提高三维图形的显示速度;
3、颜色模式设置:OpenGL颜色模式有两种,即RGBA模式和颜色索引;
4、光照和材质设置:OpenGL光有辐射光、环境光、漫反射光和镜面光。材质是用光反射率来表示。场景中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色;
5、纹理映射:利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节;
6、位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合、反走样和雾的特殊图象效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果;
7、双缓存动画双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
本发明中利用视窗裁剪方法,获取不同视点高度、经纬度跨度对应的数据;再对这些数据进行整合,将满足某个视点高度、经纬度跨度的数据整合为一个数据块;在对这些数据块进行层次细节处理,得到层次细节三维模型;然后,以数据块单位绘制层次细节三维模型。这样,每次绘制时只需加载当前视窗内的数据,并不需要加载所有渲染数据,不会引起计算机崩溃,可以实现海量三维模型的渲染绘制,由于采用了层次细节处理,可以保证三维模型数据高速高精度的渲染绘制。
由于图1实施例中,绘制数据块的模型时,是没有绘制顺序的,这样不便于灵活控制;因此可对上述实施例做进一步改进:
在步骤103之后,预先设置各个数据块的绘制顺序;绘制时,按照绘制顺序绘制数据块对应的三维实体模型。
为了进一步提高绘制的效率,在步骤104中,先对每个数据块的三维模型进行三维空间索引。三维空间索引的基本方法是将整个空间分割成不同的搜索区域,以一定的顺序在这些区域中查找空间实体。按搜索分割对象不同,将空间索引分为3类:基于点、面、三维体区域划分的索引方法。
三维空间结构一般分为对象分割法和规则分割法:对象分割法一般采用层次包围体实现。层次包围体是一种简单的树结构,用一些特定的方法对空间实体对象进行分割,最终将树的每一个节点保存为所在层次的包围体信息,叶子节点则存储基本对象。规则分割法将空间按照规则分割成均匀的单元,然后将空间中的每个实体对应到一个或多个单元中,适用于实体在空间中均匀分布的环境。规则格网空间索引的基本思想是将研究区域用横竖线划分为大小相等或不等的网格,记录每一个格网所包含的地理对象,将空间格网按Morton码编码,构建Marton码与空间对象的关系。
经过三维空间索引,获取每个三维实体模型的模型顶点数和三角面数;
对每块数据块内的所有三维模型的模型顶点数和三角面数进行比较;
在绘制每一个数据块对应的三维实体模型时,从模型顶点数和三角面数最少的三维实体模型开始绘制。
接着介绍本发明的装置,请参考图6,一种三维模型绘制装置,包括:
初始化单元T1,用于对显示数据进行视窗裁剪,获得与不同视点高度、不同经纬度跨度对应的数据;
比较单元T2,用于根据不同视点高度、经度跨度和纬度跨度,将对应的数据划分成若干有层次的数据块;
LOD单元T3,用于对每个数据块进行层次细节处理,为每个数据块构建若干与该数据块层次对应的三维实体模型;
绘制单元T4,用于绘制每个数据块对应的三维实体模型。
本发明中利用视窗裁剪方法,获取不同视点高度、经纬度跨度对应的数据;再对这些数据进行整合,将满足某个视点高度、经纬度跨度的数据整合为一个数据块;在对这些数据块进行层次细节处理,得到层次细节三维模型;然后,以数据块单位绘制层次细节三维模型。这样,每次绘制时只需加载当前视窗内的数据,并不需要加载所有渲染数据,不会引起计算机崩溃,可以实现海量数据的渲染绘制,由于采用了层次细节处理,可以保证三维模型数据高速高精度的渲染绘制。
其中,初始化单元T1的具体操作是:初始化单元T1调节视窗的视点高度、变换经纬度跨度,获得不同视景体;对在视景体内的图像显示数据进行裁剪,获得不同视点高度、不同经纬度对应的图像数据。
请参考图7,为了便于控制绘制,可在上述装置的基础上,增加顺序设置单元T5,用于预先设置各个数据块的绘制顺序;
绘制单元T4按照顺序设置单元T5设置的绘制顺序绘制每个数据块对应的三维实体模型。
为了进一步提高绘制效率,可对绘制单元T4的处理机制作如下改进:
在绘制单元T4绘制每个数据块对应的三维实体模型前,先对每个数据块的三维实体模型进行三维空间索引,获取每个三维实体模型的模型顶点数和三角面数;
在绘制每一个数据块对应的三维实体模型时,从模型顶点数和三角面数最少的三维实体模型开始绘制。
本发明可应用在各个三维图像绘制领域,如电力设备三维模型可视化,下面就以电力设备三维模型可视化为例,对本发明作进一步的阐述。
首先对电力设备的图像数据进行视窗裁剪,获得与不同视点高度、不同经纬度跨度对应的图像数据;
根据不同视点高度、经纬度跨度将对应的图像数据划分成若干数据块;在实践中发现将三维电力设备的图像数据划分成6个层次的数据块效果最好;具体为:
将视点高度为1千米至5千米的,经度跨度为0.368度、纬度跨度为0.368度的图像数据归为一个数据块,并定义级别为1;将视点高度为200米至1千米的,经度跨度为0.092度、纬度跨度为0.092度的图像数据归为一个数据块,并定义级别为2;将视点高度为0米至200米的,经度跨度为0.023度、纬度跨度为0.023度的图像数据归为一个数据块,并定义级别为3;
具体分块规则,可参照表1至表3:
表1
表2
表3
根据上述处理得到6个层次的数据模块:
第一层:点线层1,包含的内容有:超高电压(500KV以上)逻辑接线图;
第二层:点线层2,包含的内容有:高电压(110KV以上)走向图、电厂点以及电站点;
第三层:点线区层,包含的内容有:线路走向图、杆塔点、电厂点、电站点;
第四层:一级复杂线层,包含的内容有:简单杆塔、变电站、电厂模型、不分裂导地线;
第五层:二级复杂线层,包含的内容有:复杂模型、分裂导地线;
第六层:三级复杂线层,包含的内容有:高精细杆塔、变电站、电厂模型以及分裂导线;
其中第一、二层参考表1规则;第三、四、二层参考表2规则;第五、六层参考表3规则。
对每个层次的数据块进行层次细节处理,构建若干电力设备三维实体模型;绘制每个数据块对应的电力设备三维实体模型。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。