基于OpenGL双重拾取的空间目标OCS快速计算方法转让专利

申请号 : CN201510784884.9

文献号 : CN105405144B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐灿张雅声李智樊鹏山刘海洋刁华飞赵阳生李纪莲杨庆李鹏

申请人 : 徐灿

摘要 :

本发明公开一种基于OpenGL双重拾取的空间目标OCS快速计算方法,包括步骤一、对空间目标建模;步骤二、解析三维模型并命名每个面元;步骤三、绘制模型,根据探测器方位对模型进行可见面元拾取,根据光源方位对模型进行光照面元拾取,得到两个面元集合;步骤四、对上述两个面元集合取交集,获取探测器可见的光照面元;步骤五、计算获得的交集中每个面元的OCS值,进而计算空间目标的OCS值。本发明针对当前有限元方法计算空间目标OCS时效率低的问题,利用OpenGL的面元拾取功能,快速获取可见面元信息,以计算目标的OCS值。该方法不仅避免了繁琐的消隐处理,还可以获取每一个面元的材质、顶点等详细信息,能够快速计算由多种材质构成的复杂空间目标OCS。

权利要求 :

1.基于OpenGL双重拾取的空间目标OCS快速计算方法,包括:步骤一、利用三维建模软件对空间目标建模;

步骤二、解析三维模型并命名每个面元;

步骤三、利用OpenGL绘制模型,根据探测器方位对模型进行可见面元拾取,根据光源方位对模型进行光照面元拾取,得到两个面元集合;

步骤四、对步骤三中两次拾取的面元集合取交集,获取探测器可见的光照面元;

步骤五、计算获得的交集中每个面元的OCS值,累加所有面元OCS值得到空间目标的OCS值。

2.如权利要求1所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,步骤一中,所述利用三维建模软件对空间目标建模,包括:利用三维建模软件对空间目标进行建模,将模型分割为若干个三角面元,并保留每个面元的信息, 文件保存成.3ds格式。

3.如权利要求2所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,所述三维建模软件为Creator或3DMAX;和/或

所述保留每个面元的信息,包括保留每个面元的材质和顶点信息。

4.如权利要求1至3之一所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,步骤二中,所述解析三维模型并命名每个面元,包括:解析步骤一中的模型文件,给每一个解析出的三角面元命名并记录其顶点、材质信息;

5.如权利要求1所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,步骤三中,还需要开启OpenGL深度缓存和深度测试,在基于OpenGL绘制目标模型时体现面元间的相互遮挡关系。

6.如权利要求1或5所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,步骤三中,在进行可见面元拾取时,要两次设定对目标模型的观察视角,观察视角由空间目标实际光照和观测角度确定;和/或所述的可见面元拾取及光照面元拾取是OpenGL获取指定区域面元信息的方法,拾取范围是整个绘图窗口以确保涵盖模型所在的区域;和/或所述根据光源方位对模型进行光照面元拾取,基于在轨道运行的空间目标仅受到太阳的光照。

7.如权利要求1所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,步骤四中,所述获取探测器可见的光照面元作为计算整个模型OCS的有效面元,参与后续OCS计算。

8.如权利要求1所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,步骤五中,计算获得的交集中每个面元的OCS值,包括根据各面元顶点信息计算表面法线矢量及面元面积,结合每个面元材质计算其OCS。

9.如权利要求8所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,计算单个有效面元的OCS时,计算OCS所使用的面积、法线矢量均来自步骤二中解析的数据;根据步骤二解析的面元材质名称,在常用空间目标表面材质BRDF(双向反射分布函数)数据库中获取该材质的BRDF参数;结合上述参数计算该面元的OCS值;和/或所述常用空间目标表面材质BRDF数据库,用以存储常用空间目标表面材质的BRDF参数,该数据库可通过BRDF测量设备测量获得原始数据,进而可解算出Phong模型、五参数半经验统计模型的参数值;对于朗伯体目标,可根据其反射率解算BRDF。

10.如权利要求1所述的基于OpenGL双重拾取的空间目标OCS快速计算方法,其特征在于,所述计算空间目标的OCS值,是指在每个有效面元OCS计算的基础上,将全部有效面元OCS值累加得到整个模型的OCS值。

说明书 :

基于OpenGL双重拾取的空间目标OCS快速计算方法

技术领域

[0001] 本发明涉及一种空间目标OCS(光学横截面积,optical cross section)的快速计算方法,属于空间目标监视技术领域,用于空间目标OCS的快速计算,有助于开展空间目标光学特性分析及空间目标识别等工作。

背景技术

[0002] 空间目标是指在宇宙空间运行的航天器和空间碎片。空间目标的OCS是其重要属性,对确定空间目标监视方案、开展目标特性分析及目标识别具有重要意义,对空间目标OCS的数值计算一直是空间目标监视领域的研究热点。
[0003] 空间目标光学横截面积OCS的定义式为:
[0004] OCS=∫Afr(θi,θr)cosθicosθrdA  (1)
[0005] 对于具有面积dA的小面元而言,其法向量为 由模型几何中心到太阳的单位矢量为 由模型几何中心到探测器的单位矢量为 则θi为 与 的夹角且满足θr为 与 的夹角且满足 其中‘·’为点乘;fr(θi,θr)为BRDF(Bi-
directional Reflectance Distribution Function,双向反射分布函数)函数值,对于反射率为ρ的朗伯体目标,其各向BRDF值相同,即fr(θi,θr)=ρ/π,不同材质对应的BRDF数值也不同。对空间目标光学观测而言,目标的亮度通常用星等来表示,星等又可以由目标的OCS值推算得到,因此在光照强度近似相同的近地空间,空间目标的OCS也成为衡量目标亮度的关键属性。由式(1)可知,空间目标的OCS仅与目标材质、形状、入射及出射角有关,而与探测器距离及性能参数无关,具有更广泛的用途。
[0006] 上式的积分范围为探测器可见的光照面积(有效面元),该部分面元为光线照射且同时为探测器可见。对于空间目标而言,入射太阳光可视为单一方向的平行光,包括地球反射光在内的其他光线可以忽略。
[0007] 现有对空间目标OCS的计算方法中,主要可以分为解析法和有限元法。解析法是用解析表达式描述各角度上的OCS数值,精度较高但仅适用于简单几何形状的物体,如平板、球体、立方体、圆柱、圆锥等,工程上常将目标假设为特定形状的几何体,进而利用解析法估计其OCS值,估计误差较大。
[0008] 有限元法则是将目标模型拆分为数量众多的小面元,确定探测器可见的光照面元后计算每个面元的OCS值,最终将所有面元OCS累加得到目标的OCS值。其中,对有效面元(既被光照又被探测器可见)的分析是有限元法的关键技术。目前,分析有效面元的主要方法如下:
[0009] 首先将目标拆分为许多微小面元,通过一定格式的文件,如顶点文件、面元拓扑文件等记录每个小面元的顶点坐标、法向矢量和所代表的材质类型等。接下来需要根据面元法向矢量、入射太阳光方向矢量和观测方向矢量判断面元是否可见,找出有效面元,这一过程也称为一次遮挡判断。在此基础上,还要判断这些小面元在光照及观测方向上的相互遮挡关系,将被其它面元所遮挡的小面元剔除掉,这一判断称为二次遮挡判断,也称为目标的消隐处理。面元之间相互遮挡的判断过程复杂且运算量巨大,其循环判断次数为N2(N为面元数量),对于面元数量较多的复杂空间目标,消隐处理耗时较长。同时,由于遮挡判断是以面元中心为依据进行的,存在一定的误差,减小这一误差的方法只有增加面元数量,这又进一步增加了运算量。若减少面元数量、增大面元面积,则面元间相互遮挡关系的分析误差以及与实际模型的差别就会大幅增加,OCS计算精度降低,这一矛盾成为制约有限元法计算空间目标OCS的瓶颈问题。
[0010] 当前,基于有限元思想的空间目标OCS计算方法中,也存在基于OpenGL的消隐方法,该方法通过将模型投影到屏幕上实现消隐处理,读取投影后的像素值,进而推算出模型的可见面积及材质情况。这种方法仅针对单一材质的目标,当同时存在多种材质时,该方法不再适用。2010年,美国AGI公司发布的STK 9.2.1中,发布了光电红外模块EOIR,该模块由美国太空动力学实验室开发,可以计算空间目标的OCS值。但该模块同样仅适用于单一材质的模型,适用性有限。本发明提出的技术旨在解决传统有限元法消隐处理过程繁琐、利用OpenGL读取像素时无法处理多种材质目标等问题。

发明内容

[0011] 本发明提供了一种基于OpenGL双重拾取的空间目标OCS快速计算方法,通过OpenGL的拾取功能,分别拾取空间目标模型在光照方向和探测器方向的可见面元并取其交集(即有效面元集合),实现对有效面元信息的提取,结合模型解析数据和BRDF数据计算每个有效面元的OCS值并最终累加获得目标的OCS值。本发明通过OpenGL对计算机图形硬件进行操作,完成模型显示和有效面元的拾取,不仅可以快速准确完成消隐处理,还能充分获取包括顶点、材质在内的有效面元信息,提高计算多材质目标OCS的能力。
[0012] 本发明的目的通过以下技术方案来具体实现:
[0013] 基于OpenGL双重拾取的空间目标OCS快速计算方法,包括:
[0014] 步骤一、利用三维建模软件对空间目标建模;
[0015] 步骤二、解析三维模型并命名每个面元;
[0016] 步骤三、利用OpenGL绘制模型,根据探测器方位对模型进行可见面元拾取,根据光源方位对模型进行光照面元拾取,得到两个面元集合;
[0017] 步骤四、对步骤三中两次拾取的面元集合取交集,获取探测器可见的光照面元;
[0018] 步骤五、计算获得的交集中每个面元的OCS值,累加所有面元OCS值得到空间目标的OCS值。
[0019] 步骤一中,所述利用三维建模软件对空间目标建模,包括:利用三维建模软件对空间目标进行建模,将模型分割为若干个三角面元,并保留每个面元的信息,文件保存成.3ds格式。
[0020] 所述三维建模软件为Creator或3DMAX;和/或
[0021] 所述保留每个面元的信息,包括保留每个面元的材质和顶点信息。
[0022] 步骤二中,所述解析三维模型并命名每个面元,包括:解析步骤一中的模型文件,给每一个解析出的三角面元命名并记录其顶点、材质信息;
[0023] 步骤三中,还需要开启OpenGL深度缓存和深度测试,在基于OpenGL绘制目标模型时体现面元间的相互遮挡关系。
[0024] 步骤三中,在进行可见面元拾取时,要两次设定对目标模型的观察视角,观察视角由空间目标实际光照和观测角度确定;和/或
[0025] 所述的拾取是OpenGL获取指定区域面元信息的方法,拾取范围是整个绘图窗口以确保涵盖模型所在的区域;和/或
[0026] 所述根据光源方位对模型进行光照面元拾取,基于在轨道运行的空间目标仅受到太阳的光照。
[0027] 步骤四中,所述获取探测器可见的光照面元作为计算整个模型OCS的有效面元,参与后续OCS计算。
[0028] 步骤五中,计算获得的交集中每个面元的OCS值,包括根据各面元顶点信息计算表面法线矢量及面元面积,结合每个面元材质计算其OCS。
[0029] 计算单个有效面元的OCS时,计算OCS所使用的面积、法线矢量均来自步骤二中解析的数据;根据步骤二解析的面元材质名称,在常用空间目标表面材质BRDF(双向反射分布函数)数据库中获取该材质的BRDF参数;结合上述参数计算该面元的OCS值;和/或[0030] 优选地,所述常用空间目标表面材质BRDF数据库,用以存储常用空间目标表面材质的BRDF参数,该数据库可通过BRDF测量设备测量获得原始数据,进而可解算出Phong模型、五参数半经验统计模型等BRDF模型的参数值。对于朗伯体目标,可根据其反射率解算BRDF。
[0031] 所述计算空间目标的OCS值,是指在每个有效面元OCS计算的基础上,将全部有效面元OCS值累加得到整个空间目标模型的OCS值。
[0032] 本发明针对当前有限元方法计算空间目标OCS时效率低的问题,利用OpenGL的面元拾取功能,快速获取可见面元信息,以计算目标的OCS值。该方法不仅避免了繁琐的消隐处理,还可以获取每一个面元的材质、顶点等详细信息,能够快速计算由多种材质构成的复杂空间目标OCS。

附图说明

[0033] 下面根据附图和实施例对本发明作进一步详细说明。
[0034] 图1是KH-12卫星三维模型及其部件属性示意图,其中,图1a是利用Creator 2.6对KH-12卫星进行建模的结果;图1b是KH-12卫星三维模型部件属性。
[0035] 图2是简单圆柱体三维模型及其部件属性示意图,其中,图2a是简单圆柱体三维模型;图2b是简单圆柱体三维模型部件属性。
[0036] 图3是基于OpenGL编程读入的目标模型示意图,其中,图3a是KH-12卫星模型;图3b是简单圆柱体模型。
[0037] 图4是OpenGL坐标系及旋转角示意图。
[0038] 图5是朗伯圆柱体示意图。
[0039] 图6是本发明算法与理论值对比示意图;其中,图6a是实验1中OCS计算结果对比图;图6b是实验1中OCS计算误差图;图6c是实验2中OCS计算结果对比图;图6d是实验2中OCS计算误差图。
[0040] 图7是本发明的流程图。

具体实施方式

[0041] 如图7所示,本发明实施例提供了一种基于OpenGL双重拾取的空间目标OCS快速计算方法,包括:
[0042] 步骤一、利用三维建模软件对空间目标建模;
[0043] 步骤二、解析三维模型并命名每个面元;
[0044] 步骤三、利用OpenGL绘制模型,根据探测器方位对模型进行可见面元拾取,根据光源方位对模型进行光照面元拾取,得到两个面元集合;
[0045] 步骤四、对步骤三中两次拾取的面元集合取交集,获取探测器可见的光照面元;
[0046] 步骤五、计算获得的交集中每个面元的OCS值,累加所有面元OCS值得到空间目标的OCS值。
[0047] 步骤一中,所述利用三维建模软件对空间目标建模,包括:利用三维建模软件对空间目标进行建模,将模型分割为若干个三角面元,并保留每个面元的信息,文件保存成.3ds格式。
[0048] 所述三维建模软件为Creator或3DMAX;和/或
[0049] 所述保留每个面元的信息,包括保留每个面元的材质和顶点信息。
[0050] 步骤二中,所述解析三维模型并命名每个面元,包括:解析步骤一中的模型文件,给每一个解析出的三角面元命名并记录其顶点、材质信息;
[0051] 步骤三中,还需要开启OpenGL深度缓存和深度测试,在基于OpenGL绘制目标模型时体现面元间的相互遮挡关系。
[0052] 步骤三中,在进行可见面元拾取时,要两次设定对目标模型的观察视角,观察视角由空间目标实际光照和观测角度确定;和/或
[0053] 所述的拾取是OpenGL获取指定区域面元信息的方法,拾取范围是整个绘图窗口以确保涵盖模型所在的区域;和/或
[0054] 所述根据光源方位对模型进行光照面元拾取,基于在轨道运行的空间目标仅受到太阳的光照。
[0055] 步骤四中,所述获取探测器可见的光照面元作为计算整个模型OCS的有效面元,参与后续OCS计算。
[0056] 步骤五中,计算获得的交集中每个面元的OCS值,包括根据各面元顶点信息计算表面法线矢量及面元面积,结合每个面元材质计算其OCS。
[0057] 计算单个有效面元的OCS时,计算OCS所使用的面积、法线矢量均来自步骤二中解析的数据;根据步骤二解析的面元材质名称,在常用空间目标表面材质BRDF(双向反射分布函数)数据库中获取该材质的BRDF参数;结合上述参数计算该面元的OCS值;和/或[0058] 优选地,所述常用空间目标表面材质BRDF数据库,用以存储常用空间目标表面材质的BRDF参数,该数据库可通过BRDF测量设备测量获得原始数据,进而可解算出Phong模型、五参数半经验统计模型等BRDF模型的参数值。对于朗伯体目标,可根据其反射率解算BRDF。
[0059] 所述计算空间目标的OCS值,是指在每个有效面元OCS计算的基础上,将全部有效面元OCS值累加得到整个空间目标模型的OCS值。
[0060] 按照本发明上述实施例提出的步骤,将具体实施方式分解如下:
[0061] 1)空间目标三维建模
[0062] 利用三维建模软件对空间目标进行建模,将模型分割为若干三角面元并保留面元的材质信息,文件保存成‘.3ds’格式。图1为利用Creator 2.6对KH-12卫星进行建模的结果(图1a)及其部件属性(图1b)。属性包括部件名称、纹理及面元数量,其中名称(‘Name’)即模型所包含的部件名称,不同的部件,纹理或材质一般也不同。该模型总面元数量超过5000个,属于复杂目标。当然也可以建立简单形状的目标模型,如图2所示的圆柱体仅有一种材质,面元数量也只有396个。
[0063] 2)解析‘.3ds’模型文件并利用OpenGL重绘三维模型
[0064] ‘.3ds’模型文件具有统一的结构,便于编程读取。该格式能稳定地保存模型网格信息和纹理贴图信息,也兼容基础骨骼和基本动画。3ds模型文件由许多块组成,每个块首先描述其后的信息类别,即该块是如何组成的,块的信息类别是用ID来识别的,块还包含了下一个块的相对位置信息,因此,即使不了解一个块的含义,也可以很容易地跳过它,因为当前块中指出了下一个块相对于该块起始位置的偏移字节数。在读取3ds文件时,本发明仅需读取顶点数据、各对象材质名称及面元索引信息,其他信息则跳过。
[0065] 3ds文件结构中,每个部件含有的面元数量不同,每个面元则分别包含相应的顶点索引以确定三点坐标。将读入的面元按顺序存入链表中,每个面元均包含编号、顶点索引、材质等信息。
[0066] 根据链表中存储的三角面元信息,利用OpenGL逐个将面元绘制出来。这里需要注意的是,在绘制面元的同时需要给每个面元命名(利用OpenGL命令glLoadName(m_iName),其中m_iName为面元名称),名称为从0开始的整型数字,命名的目的是便于后续进行拾取。
[0067] 按照上述方法绘制的目标模型如图3所示(图3a是KH-12卫星模型,图3b是简单圆柱体模型),由于面元拾取时不需要纹理信息,绘制的面元也就没有粘贴纹理图片。
[0068] 3)利用OpenGL拾取功能对光照面元及探测器可见面元进行拾取
[0069] 在进行拾取前,首先要将模型旋转至适当的视角。
[0070] 光照视角的旋转,也就是需要将光照所看到的图像投影到用户视角(用户视角沿Z轴正向望向原点,原点为绘图窗口的中心)下。在OpenGL绘制模型时,坐标系中心在绘制窗口的中心位置,X轴从原点向右为正,Y轴则从原点向上为正,Z轴与XOY平面呈右手系,如图4所示。
[0071] 令从坐标原点到光源(太阳)的单位矢量为 在OpenGL坐标系下,将光照视角旋转为用户视角的旋转角度为
[0072]
[0073] 在解算以上两个角度的基础上,两次调用OpenGL旋转函数,完成绕X轴的旋转和绕Y轴的旋转,旋转函数如下
[0074]
[0075]
[0076] 按照上述方法将太阳视角旋转至用户视角下后,利用OpenGL拾取功能对可见面元进行拾取。拾取前应设定拾取范围,本发明的拾取范围为整个绘图窗口,拾取结果存储到相应数组中,记其面元集合为A1。
[0077] 同样,将探测器观测视角旋转至用户视角下后,对探测器可见面元进行拾取并记其面元集合为A2。
[0078] 取A=A1∩A2,其中“∩”表示交集,则集合A中的面元为探测器可见的光照面元,将参与后续OCS计算。
[0079] 4)面元OCS计算
[0080] 基于有限元思想的目标OCS计算中,积分变为累加,设某次运算中集合A中有N个面元,则目标OCS的计算公式变为
[0081]
[0082] 其中,Al为第l个面元的面积,θli为该面元法线方向与太阳矢量(目标中心到太阳的矢量)之间的夹角,θlr为该面元法线方向与探测器矢量(目标中心到探测器的矢量)之间的夹角,fr为该材质的BRDF值,可以从数据库中读取或根据其反射率解算。在解析模型的过程中已经得到该面元的三个顶点的坐标,分别记为 和 (逆时针排列),则其单位法线矢量 及Al可以表示为
[0083]
[0084]
[0085]
[0086]
[0087] 其中, 表示叉乘,‘|·|’表示取模。
[0088] 至此,第l个面元OCS计算过程中的所有变量均已表示出来,进而可以根据式(2)得到整个目标的OCS值。
[0089] 5)本发明算法的验证
[0090] 复杂目标OCS值的真实值难以获取,也就无法使用复杂目标对模型进行验证。鉴于简单几何体的OCS存在解析解,这里以朗伯圆柱体为例,验证本发明所提算法的正确性。
[0091] 这里分别取两组不同的测试角度,对比理论值与本发明数值仿真结果。圆柱体坐标系如图5所示:
[0092] 其中,OS为光源矢量,OD为探测器矢量,OS与Y轴夹角为η,OS在XOZ平面上的投影与Z轴重合,OD与Y轴的夹角为γ,其在XOZ平面上的投影与Z轴夹角为β,若朗伯圆柱体的半球反射率为ρ2π,则其BRDF为ρ2π/π。得出朗伯圆柱体OCS表达式如下:
[0093]
[0094] 其中R为底面半径,L为圆柱体高度。这里取R=1,L=5,ρ2π=0.5。
[0095] 实验1:令η=γ=0,β由0°到180°变化,计算OCS及其误差结果如图6a、6b所示。实验2:令β=0,η=45°,γ由0°到180°变化,计算OCS及其误差结果如图6c、6d所示。
[0096] 图6中横坐标为角度值(图6a、图6b中横坐标为β角度,图6c、图6d中横坐标为γ角度,单位为度),纵坐标分别是OCS值(如图6a、图6c所示,单位为平方米)及其误差百分比(误差与理论值比值的绝对值×100,如图6b、图6d所示,无量纲)。
[0097] 通过以上对比实验可以看到,本发明所提算法与理论值吻合度较高,误差均小于0.08%,表明其精度较高。算法在内存4G,主频3.3GHz的32位Win7操作系统下运行,完成全部180次的OCS运算,所需时间约为2秒,平均单次运算时间只有0.01秒,可见其计算速度之快,这也充分体现了本发明快速准确的特点。对于面元超过5000的复杂目标模型KH-12,完成180次的OCS运算需要14秒,平均单次运算时间小于0.1秒,完全满足对复杂目标OCS的实时高精度运算需求。