法律状态公告日
法律状态信息
法律状态
2017-06-20
授权
授权
2015-06-24
实质审查的生效 IPC(主分类):G06F17/10 申请日:20150211
实质审查的生效
2015-05-27
公开
公开
技术领域
本发明属于科学计算可视化领域,具体涉及一种基于GPU的动态二维矢量场流线可视化算法。
背景技术
随着探测技术和数值模拟的发展,大规模、实时的数据越来越庞大,远远超过了CPU的计算和分析能力,阻碍了许多领域的科学研究进展。随着高性能计算时代的到来,GPU为大数据可视化提供了一个新的技术手段,不仅大幅提高了处理能力,而且在成本和功耗上也不需要付出太大的代价。而shading language的成熟,使得人们可以方便有效的处理大量矢量场数据并以清楚直观的形式显示出来。
对二维矢量场进行可视化的方法有很多种,常见的有点图标法、纹理法和矢量线法。点图标方法简单直观,但是不适宜采样密集和变化突兀的矢量场;纹理法能反映整个矢量场的结构,但是容易产生模糊和混淆; 矢量线法利用空间中的曲线走向来描述矢量场。在矢量场中,流线上所有点的瞬时速度都与该线相切。迹线是在一个矢量场中,释放一个无质量的粒子,沿着它在流场中的运动轨迹所形成的矢量线。流线适合研究稳定场,迹线适合研究不稳定场,在稳定场中二者是重合的。
本发明提出的二维矢量场可视化算法,在空间上以流线的形式表现矢量场的瞬时特征,在时间上以迹线的形式表现矢量场的连续特征,并且能对流线进行长短、疏密和光滑度的控制,高效地展现矢量场的各种特征。
发明内容
本发明提出了一种基于GPU的动态二维矢量场流线可视化算法。该算法在矢量场中随机分布粒子,使粒子随流场运动,并利用GPU的geometry shader机制生成流线。通过计算以粒子为中心的径向基函数,生成流场的概率密度图,以控制粒子的产生、消亡以及多分辨率分布。
为实现上述目的,本发明采用如下技术方案,具体步骤为。
(1) 通过GPU的transform feedback机制和径向基函数使粒子运动并控制粒子密度。
(2) 通过GPU的geometry shader将粒子生成流线。
(3) 根据相机距离计算可见流场范围和流线的细分程度,实现流线密度和细节程度的多分辨率。
上述步骤(1)采样矢量场驱动粒子运动并实时生成概率密度图,根据粒子疏密及粒子年龄随机剔除和产生粒子。步骤(2)以粒子的位置作为流线的头部,使用四阶Runge-Kutta积分得到下一个位置,在geometry shader中将粒子扩展为流线。步骤(3)通过设置粒子的径向基函数半径和流线的细分因子生成不同密度的粒子和不同细节程度的流线。
本发明的有益效果在于:该算法以流线的形式展示矢量场的全貌,可以实时改变流线的密度、长短、运动快慢和光滑程度,由于流线是连续的且逐条独立,能很好的动态表现复杂的矢量场特征,达到可视化的认知目的。而且该算法基于GPU实现,流线生成和控制的效率更高。
附图说明
图1基于GPU的动态二维矢量场流线可视化算法流程图。
具体实施方式
本发明在矢量场中密集分布粒子,使粒子随矢量场运动,通过概率密度控制粒子分布;通过积分将粒子扩展为流线;最后根据相机距离更改可见区域的粒子密度及流线的层级细节(如图1所示)。包括以下步骤。
1. 通过GPU的transform feedback机制和径向基函数使粒子运动并控制粒子密度。
在矢量场中随机均匀分布新粒子,粒子的年龄都置为0,粒子均为活动的。将粒子的x,y坐标归一化到0~1之间,作为纹理坐标采样矢量场,使粒子随矢量场运动。粒子的新位置通过四阶Runge-Kutta积分得到,并通过transform feedback机制从GPU流水线上保存到本地端的缓存中,作为下一次运动的起点。粒子运动会导致粒子的聚集和空洞,不利于表现矢量场的整体特征。对于每个粒子,通过径向基函数生成一个中间灰度值大、边缘灰度值小的圆片,不同圆片可叠加,这样粒子密度大的区域灰度值高,粒子密度低的区域灰度值小,没有粒子的区域灰度值为0,如此便生成了矢量场的概率密度图。采样概率密度图,若粒子对应的概率密度大于某一阈值,则随机去除粒子。对于要去除的粒子,随机赋予其一个新位置,若该新位置的概率密度小于某一阈值,则确认其为一新粒子(原粒子自然消失),否则将原粒子置为死亡。对于之前已经死亡的粒子也赋予一个随机新位置,进行同样的判断。
2. 通过GPU的geometry shader将粒子生成流线。
GPU的geometry shader能够改变图元的类型,例如将点生成线。以粒子作为流线的头部,采样矢量场,通过四阶Runge-Kutta积分得到流线上的第二个点,再以该点的位置采样矢量场进行积分,得到第三个点,重复上述步骤,点数达到设定值后或采样到矢量场边缘时停止,将这些点连起来便生成了流线,若点之间距离足够近则流线能够相当光滑。在生成流线时同时考虑粒子的年龄设置流线整体的透明度,而且流线的尾部应该比头部更透明,这样流线生成和消失时会有淡入和淡出的效果,流线运动时也更有动感。
3. 根据相机距离计算可见流场范围和流线的细分程度,实现流线密度和细节程度的多分辨率。
在相机拉远和拉近的过程中,流线的疏密和细节程度应该相应的发生变化。根据视域锥和相机距离可以计算出矢量场的可见范围,对该范围内的流线进行控制,范围外的流线使用最稀疏的密度和细节层次。密度的控制通过改变径向基函数的半径大小进行:若要增大密度则减小半径,反之则增大半径。流线的细节控制通过在GPU的Tessellation shader中设置流线的细分因子,实现流线不同程度的细化。
机译: 基于在线学习的算法,可以提高外部缓存中GPU生成的动态表面的保留和重用
机译: 基于在线学习的算法可提高外层缓存中GPU生成的动态表面的保留和重复使用
机译: 基于在线学习的算法可提高外层缓存中GPU生成的动态表面的保留和重复使用