• ISSN: 1674-7461
  • CN: 11-5823/TU
  • 主管:中国科学技术协会
  • 主办:中国图学学会
  • 承办:中国建筑科学研究院有限公司

OpenGL图形渲染技术在PKPM-SAUSAGE非线性分析软件中的应用

乔保娟, 李志山, 刘春明, 侯晓武, 杨志勇

乔保娟, 李志山, 刘春明, 侯晓武, 杨志勇. OpenGL图形渲染技术在PKPM-SAUSAGE非线性分析软件中的应用[J]. 土木建筑工程信息技术, 2015, 7(5): 13-18. DOI: 10.16670/j.cnki.cn11-5823/tu.2015.05.03
引用本文: 乔保娟, 李志山, 刘春明, 侯晓武, 杨志勇. OpenGL图形渲染技术在PKPM-SAUSAGE非线性分析软件中的应用[J]. 土木建筑工程信息技术, 2015, 7(5): 13-18. DOI: 10.16670/j.cnki.cn11-5823/tu.2015.05.03
Qiao Baojuan, Li Zhishan, Liu Chunming, Hou Xiaowu, Yang Zhiyong. Application of OpenGL Graphics Rendering Technology inthe Nonlinear Analysis Software of PKPM-SAUSAGE[J]. Journal of Information Technologyin Civil Engineering and Architecture, 2015, 7(5): 13-18. DOI: 10.16670/j.cnki.cn11-5823/tu.2015.05.03
Citation: Qiao Baojuan, Li Zhishan, Liu Chunming, Hou Xiaowu, Yang Zhiyong. Application of OpenGL Graphics Rendering Technology inthe Nonlinear Analysis Software of PKPM-SAUSAGE[J]. Journal of Information Technologyin Civil Engineering and Architecture, 2015, 7(5): 13-18. DOI: 10.16670/j.cnki.cn11-5823/tu.2015.05.03

OpenGL图形渲染技术在PKPM-SAUSAGE非线性分析软件中的应用

基金项目: 

国家科技支撑计划课题(2014BAH25F02);教育部创新团队(IRT13057)

教育部创新团队 IRT13057

国家科技支撑计划课题 2014BAH25F02

详细信息
    作者简介:

    乔保娟(1987-),女,工程师。主要从事软件研发工作

  • 中图分类号: TU311.41

Application of OpenGL Graphics Rendering Technology inthe Nonlinear Analysis Software of PKPM-SAUSAGE

  • 摘要: 通过对目前比较常用的GDI绘图和OpenGL绘图进行比较分析,显示了用OpenGL开发的三维有限元图形系统具有的速度快、绘图功能强、捕捉方便、视觉效果好等优越性。介绍了PKPM-SAUSAGE软件三维模型绘图流程,凹多边形网格化显示技术,背面剔除及alpha混合,实时旋转、平移、缩放算法和高效的捕捉算法,以及后处理结果平滑显示技术和着色器编程颜色修正技术。最后通过工程实例验证了PKPM-SAUSAGE软件OpenGL图形显示、旋转、平移、缩放及捕捉的高效性。
    Abstract: In this paper, the superiorities of 3D finite element graphics system developed by OpenGL, such as high speed, powerful drawing function, convenient selection and feedback and nice visual effect are demonsrated through the comparison between GDI and OpenGL, which are both popular in graphics system at present. The paper also introduces drawing process of 3D model by OpenGL, display technology of concave polygon, back face culling and alpha blending, real-time rotation, translation, scaling, and efficient capture algorithm of PKPM-SAUSAGE software as well as the results display smoothing technology and color correction technology by shader programming in post-processing. Finally, the efficiency of OpenGL graphics display, rotation, translation, scaling and capture in PKPM-SAUSAGE software is verified by practical engineering examples.
  • 与普通机械CAD软件相比,建筑结构有限元分析软件具有两个特点:1)几何对象体量大,通常包含数以百万的几何实体(构件、单元等); 2)对图形渲染效率要求高,用户期望建筑结构的三维模型能够实时显示,旋转、平移、缩放和捕捉等交互操作流畅。这就对图形渲染技术提出了很高的要求。

    目前有不少建筑结构有限元分析软件是利用Windows提供的一套图形设备接口GDI进行图形绘制。GDI是Windows下的通用的绘图设备,它面向二维图形的绘制,提供的绘图函数有限,而且对计算机资源的占用也很多。因此,对于大型复杂的建筑结构模型,其绘图效率低的特点明显暴露。并且,通过二维图形工具来表达三维实体的形状,生成的三维图形立体感和真实感不但不强,而且要通过大量的矩阵变换以及浮点计算等操作,尤其在对三维实体进行旋转、缩放、平移和拾取等操作时,其局限性更是难以克服。

    OpenGL[1]是行业领域中最为广泛接纳的2D/3D图形API,是一个功能强大,调用方便的底层图形库,它独立于窗口系统和操作系统,具有良好的可移植性,在专业图形处理、科学计算等高端应用领域应用广泛。与传统的GDI绘图相比,OpenGL具有以下优势[2]

    (1) 能充分利用显卡的硬件加速功能。OpenGL的硬件加速由显卡厂商在硬件中实现的,在安装了显卡厂商提供的显卡驱动程序后,OpenGL程序就会有“加速”的效果。目前几乎所有的显卡都可以支持OpenGL硬件加速,在一台使用高档显卡的微机上,可以达到工作站的水平。

    (2) 具有强大的模型绘制功能。使用OpenGL可以很方便地绘制点、线、多边形、曲线以及三维实体等元素。在利用OpenGL函数库绘图时,不用考虑图形显示的基本细节,可以加快开发速度。

    (3) 具有方便的选择反馈功能。在二维绘图程序中计算线段是否和鼠标的拾取框相交很容易,但是在三维绘图程序中,由于模型经过了在空间中的多次旋转、平移、缩放和投影变换,由用户直接设计算法来拾取对象将比较困难。为此,OpenGL提供了选择机制,为用户拾取对象提供了方便。

    (4) 具有通过光照处理能表达出物体三维特性的功能,具有很强的立体感。

    (5) 提供着色器编程模型。允许开发人员编写渲染算法在显卡的GPU(Graphic Processor Unit图形处理单元)上执行,代替固定的渲染管线的一部分,达到一些特殊的渲染目的,使图像更逼真。同时,着色器编程模型采用GPU并行也释放了CPU空间,提高了图形渲染效率。

    可见,OpenGL比GDI更适合有限元三维图形系统的开发,是当前开发有限元分析软件前、后处理图形系统的理想选择。本文将以PKPM-SAUSAGE软件(简称SAUSAGE)为例,探讨OpenGL图形渲染技术在大规模复杂建筑结构有限元分析前后处理中的应用。

    SAUSAGE软件基于MFC创建,程序模块化设计,采用面向对象的数据结构,具有良好的可移植性和扩展性。SAUSAGE软件代码分层隔离,包括数据交换层、数据及逻辑层、绘图层、界面控制层等四个层次。

    (1) 数据交换层:输入输出文件、接口等;

    (2) 绘图层:绘图封装库;

    (3) 数据及逻辑层:与业务有关的功能和数据定义,由细到粗分级封装,使数据结构和程序逻辑清晰,易于跟踪;

    (4) 界面控制层:用户交互操作,消息处理,对话框形式的数据输入,报表显示等;

    其中,本文讨论的基于OpenGL的图形渲染技术即封装在绘图层中。

    在设置好像素格式、光源参数(光源性质、光源位置)、颜色模式(索引、RGBA)等OpenGL参数之后,SAUSAGE软件根据建筑结构梁、柱、板、墙、阻尼器、隔振支座等各类构件的几何位置及截面尺寸,计算出绘制三维模型构件图元顶点在世界坐标系中的坐标。世界坐标系中的坐标经过视图/模型变换、投影变换和视口变换后转为屏幕坐标,这样建筑结构的三维模型图便显示在计算机屏幕上了。建筑结构三维模型绘图流程如图 1所示。

    图 1 建筑结构三维模型绘图流程
    图  1  建筑结构三维模型绘图流程

    (1) 视图/模型变换

    视图/模型变换的作用是将世界坐标系表示的模型变换到观察坐标系中。计算机图像技术中,基于固定物体位置移动相机(视图变换),或者基于固定相机位置移动被测物体(模型变换),得到效果是一样的,它们实际是等效的。因此,SAUSAGE软件中采用一个转换矩阵进行视图变换和模型变换。

    (2) 投影变换

    投影变换的目的是将观察坐标系表示的模型变换到OpenGL坐标系中。投影变换有两种:1)透视投影:这种投影的效果与人眼观察世界的效果相同,距离视点越远的物体看起来越小,距离视点越近的物体看起来越大; 2)正交投影:特点是无论物体距离视点多远,投影后的尺寸不变,常用于建筑蓝图和计算机辅助设计的应用程序; 在这类应用程序中,当物体经过投影之后,保持它们的实际大小以及它们之间的角度是至关重要的; SAUSAGE软件采用正交投影。

    (3) 视口变换

    视口是指计算机屏幕中的矩形绘图区域,它用窗口坐标来度量,反映了屏幕上的像素位置。视口变换就是将视景体内投影的物体显示在二维的视口平面上,这个过程类似于将照片放大或缩小。视口变换中视口的宽高比通常等于视景体的宽高比,否则视口内显示的图形将会发生形变。

    在SAUSAGE前处理中,各种构件、单元的颜色由软件/用户指定。后处理中,软件将弹塑性时程分析结果的数值映射到颜色空间中,通过节点/单元的颜色来反应结构不同部位的位移、应力、应变、损伤以及内力等弹塑性时程分析结果的数值分布。

    OpenGL中认为合法的多边形必须是凸多边形,凹多边形、自交多边形、带孔的多边形等非凸多边形在OpenGL中绘制会出现出乎意料的结果。简单多边形可被快速地渲染,而复杂多边形难以快速检测出来。为了最大限度的提高性能,OpenGL假定多边形是简单的。而对于真实的建筑结构,由于板、墙开洞等经常会有凹多边形或带孔多边形出现,如果人为将这类多边形拆分成凸多边形,将会把一个完整的构件拆分成多个构件,这不是结构设计师所期望的。

    为了正确显示凹多边形板、墙,SAUSAGE软件采用GLU库中多边形网格化对象GLUtesselator,对凹多边形进行网格化,将它们分解成一组简单的、能够进行渲染的OpenGL多边形。网格化实际上是在把顶点传入OpenGL管线之前,先将其传到网格化对象,网格化对象处理完后,再把处理后的顶点传入到OpenGL渲染管线。对凹多边形网格化显示,仅是图形显示上的处理,不会拆分构件,对建筑结构的三维模型没有任何影响。对凹多边形进行网格化显示前后的效果对比如图 2所示,图中选中楼板(粉色)平面形状为凹多边形。

    图 2 网格化显示凹多边形效果
    图  2  网格化显示凹多边形效果

    在SAUSAGE软件前处理中,绘制建筑结构三维模型图时,为了加快绘图速度,采用了OpenGL深度测试剔除背面功能。屏幕的深度缓存默认值为1(最远),颜色缓存则被初始化为背景颜色。所有的碎片处理完之后,它们的Z值与缓存中的值比较。如果Z值比缓存中对应的Z值小,那么碎片的Z值和颜色值就会被写入缓存中。否则,认为正准备输出显示的碎片被其他物体(碎片)挡住了,直接忽略。这种算法不会受到碎片处理顺序的影响。

    在SAUSAGE软件后处理中,在显示位移、应力、应变、内力和损伤等弹塑性时程分析结果云图时,为了方便用户观察整体结构的计算结果分布,对三维模型云图进行了alpha混合处理。RGBA颜色模式中包含一个alpha值,即透明度。alpha值的范围为[0, 1],0代表完全透明,1代表不透明。经过alpha混合处理后,透过建筑结构构件可以看到它后面的构件的弹塑性时程分析结果云图。alpha混合与背面剔除是互斥的,不能同时存在。混合公式如下:

    $ c = {\alpha _s}{c_s} + \left( {1 - {\alpha _s}} \right){c_d} $

    (1)

    其中,c为最终显示颜色,cs是原颜色,αs是原透明度(alpha),cd是目的位置颜色(背景颜色),三个颜色通道(RGB)独自进行混合。混合公式中,碎片顺排序很重要,它们必须是从“后面”到“前面”的顺序,最大深度的最先处理。

    实时平移、旋转和缩放是查看三维有限元模型时必不可少的操作。在GDI绘图中,实现这3个操作比较困难,而且容易造成屏幕闪烁。在OpenGL绘图时,只需对视点位置和参考点位置进行简单的变换操作就可以实现。

    在SAUSAGE软件中,平移需要同时改变视点和参考点的位置。旋转和平移类似,只是保持参考点不变,并保持视点和参考点的距离不变。如果旋转中心不是模型的几何中心,旋转后应该重新计算裁剪平面,以避免模型被裁剪。缩放只需要改变视景体的大小即可实现。窗口缩放算法是用鼠标在屏幕上拖出矩形框,将此框内的图形放大到整个屏幕,具体做法是,首先将矩形框的中心点对应的物体点移动到屏幕中心点,再计算图形放大倍数,以宽度方向放大倍数为准。

    将视点、参考点的移动距离和缩放比例等与鼠标操作关联起来,就可以实现鼠标操作的实时平移、旋转和缩放。

    在有限元建模软件中,很多时候都需要用户和图形对象之间进行交互操作,如用鼠标选择模型中的一个节点查看或修改该点的荷载和约束信息,或者选择一个梁柱构件查看或修改截面、材料等信息。OpenGL提供了选择机制,为用户拾取对象提供了方便。

    在选择模式下,SAUSAGE软件根据鼠标的位置在OpenGL中定义一个狭长的视景体,像一条垂直于屏幕的细长射线,在绘制一个对象之前对其进行命名,OpenGL将落在这个视景体内的对象名称存储在一个堆栈里,即选择缓冲区。选择缓冲区包括多条拾取记录,每条拾取记录由4部分组成:对象名称的个数,对象的最小z坐标(z-min),对象的最大z坐标(z-max)和对象名称。遍历缓冲区中的所有记录,综合考虑z-min、z-max及图元结构类型(可由图元名称得到)对图元进行排序。若捕捉单个图元,则排序后的第一个图元将被选中; 若框选一组图元,则选择缓冲区中的所有图元都被选中。

    与GDI绘图相比,OpenGL的最大优势是应力、位移等都是空间的,更能真实地反映实际情况,尤其是在绘制彩色云图上,OpenGL有极大的优势。

    SAUSAGE软件后处理主要是为了显示节点的位移,以及单元的应力、应变、内力、损伤等弹塑性分析结果,主要包括模态分析各阶振型变形云图,静力分析节点位移云图,动力分析节点位移云图、速度云图、加速度云图、单元应力云图、单元应变云图、单元损伤云图、钢筋塑性应变云图、钢材塑性应变云图、单元内力云图等。

    由于OpenGL本身具有颜色均匀过渡的能力,使绘制彩色云图十分方便。要生成彩色云图,先建立各节点的应力值或位移值与颜色值的对应关系; 然后,将最大值和最小值之间分成若干段,分别对应不同的颜色,采用线性插值可求得其他量值对应的颜色值。这种颜色对应关系比较形象地反映了各种应力或位移的分布。由于应力、损伤等计算结果是单元中心的值,需要用体积加权的方法转换成单元节点上的值,然后求出其颜色值。这样,利用OpenGL多边形自动颜色过渡填充的功能就可以生成彩色云图。

    为了提高云图显示效果,使颜色显示更平滑,SAUSAGE软件还提供单元形心及单元边线中点参与着色的方法。具体做法是,连接单元顶点、边线中点及单元形心,将单元剖分成多个小四边形(三角形单元剖分成三个小四边形,四边形单元剖分成四个小四边形),单元顶点颜色为与之相邻的几个单元弹塑性分析结果平均值对应的颜色,单元边线中点颜色为与之相邻的两个单元弹塑性分析结果平均值对应的颜色,单元形心颜色为本单元弹塑性分析结果对应的颜色,绘制单元时,将单元按剖分的多个小四边形来绘制。这样绘制的图形颜色过渡更均匀,且避免了平均引起的单元弹塑性分析结果最大值被削弱。某结构底部剪力墙损伤云图单元边线及形心是否参与着色效果对比如图 3

    图 3 单元形心及边线中点是否参与着色效果对比
    图  3  单元形心及边线中点是否参与着色效果对比

    有限元分析计算结果的图形显示直观明了,用户通过观察单元颜色即可快速了解计算结果的数值分布,判断结构薄弱部位,十分方便。但OpenGL多边形自动颜色过渡填充功能必然会带来一个问题,OpenGL的颜色平均为RGB值的平均,得到的颜色与计算结果平均后对应的颜色有偏差。比如,图 4中A点颜色为(255,0,0),C点颜色为(0,255,0),E点颜色为(0,0,255),OpenGL自动计算的B点颜色为(A+C)/2=(127,127,0),D点颜色为(C+E)/2=(0,127,127),F点颜色为(D+B)/2=(63,127,63),而F点颜色的正确值应为(0,255,0),也即C点颜色,这就需要对颜色进行修正,将F点拉倒C点。

    图 4 颜色修正示意图
    图  4  颜色修正示意图

    该部分采用了着色器编程技术,在输出图形时,由显卡GPU修正每个像素的颜色,具体实现代码如图 5,由于采用了GPU并行,图形显示效率很高。

    图 5 着色器编程颜色修正并行代码
    图  5  着色器编程颜色修正并行代码

    某大底盘多塔结构,47层,高168.7m,四个塔楼均为框架核心筒结构,平面尺寸分别为58.7m×41.9m,52.1m×41.2m,58m×26.4m和58m×26.4m。三维模型实体图如图 6,为了提高图形显示效率,采用了OpenGL背面剔除功能。弹塑性动力时程分析损伤云图如图 7,图中左上角小图为局部放大效果,为了方便用户查看整体结构的损伤分布,采用了alpha混合的透明效果。该结构三维模型在构件实体显式模式下,旋转、平移和缩放重绘速率为35.2fps(每秒传输帧数)。

    图 6 某建筑结构三维模型实体图
    图  6  某建筑结构三维模型实体图
    图 7 某建筑结构弹塑性分析损伤云图
    图  7  某建筑结构弹塑性分析损伤云图

    单元显式模式下,旋转、平移和缩放重绘速率11.7fps。后处理细分单元显示损伤云图时,重绘速率为5.6fps。可见,在SAUSAGE软件中,大规模复杂结构在三维模型旋转、平移和缩放时,图形重绘速率高,用户操作体验是很流畅的。

    该结构捕捉刷新速率为149.6fps,可见,在SAUSAGE软件中,捕捉效率是相当高的,达到了实时捕捉的效果。

    本文简要介绍了SAUSAGE软件的三维模型绘图流程和凹多边形网格化显示技术,软件采用OpenGL背面剔除功能以提高三维模型的绘图效率,采用alpha混合功能以提升弹塑性时程分析结果云图显示效果。同时介绍了SAUSAGE软件交互操作的实现算法,包括实时旋转、平移和缩放算法以及高效的捕捉算法。在后处理中,SAUSAGE软件通过细分单元使单元形心及边线中点参与着色的方法,使弹塑性时程分析结果云图显示更平滑、逼真,采用着色器编程技术修正OpenGL多边形自动颜色过渡填充功能带来的颜色失真问题。最后,通过工程实例验证了OpenGL图形显示、旋转、平移、缩放及捕捉的高效性。

  • 图  1   建筑结构三维模型绘图流程

    图  2   网格化显示凹多边形效果

    图  3   单元形心及边线中点是否参与着色效果对比

    图  4   颜色修正示意图

    图  5   着色器编程颜色修正并行代码

    图  6   某建筑结构三维模型实体图

    图  7   某建筑结构弹塑性分析损伤云图

  • [1] OpenGL编程指南[M]. 北京: 机械工业出版社, 2009.
    [2] 陈俊涛, 肖明, 郑永兰.用OpenGL开发地下结构工程三维有限元图形系统[J].岩石力学与工程学报. 2006, 25(5). http://www.wenkuxiazai.com/doc/30727303bed5b9f3f90f1c6e.html
图(7)
计量
  • 文章访问数:  2173
  • HTML全文浏览量:  837
  • PDF下载量:  11
  • 被引次数: 0
出版历程
  • 发布日期:  2015-09-30
  • 刊出日期:  2015-09-30

目录

/

返回文章
返回