CN102902848B - 针对边界元分析的三维可视化仿真方法 - Google Patents
针对边界元分析的三维可视化仿真方法 Download PDFInfo
- Publication number
- CN102902848B CN102902848B CN201210347865.6A CN201210347865A CN102902848B CN 102902848 B CN102902848 B CN 102902848B CN 201210347865 A CN201210347865 A CN 201210347865A CN 102902848 B CN102902848 B CN 102902848B
- Authority
- CN
- China
- Prior art keywords
- old
- new
- matrix
- model
- coordinate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种针对边界元分析的三维可视化仿真方法,包括:1:读入边界元分析后输出的结果文件;2:建立顶点缓冲和索引缓冲,将节点坐标信息和节点数值信息录入顶点缓冲,将单元组织信息录入索引缓冲,生成网格模型、实体模型、云图模型和参考坐标系;3:对模型和参考坐标系同步进行渲染、三维操作、或其它操作。该方法针对边界元分析后的结果文件进行处理,仅需输入构建模型和云图的基本信息,对格式没有特殊要求,可使用通用商业工程软件,如:Ansys、Patran、Sesam等提供输入信息,具有灵活的处理机制和较为广泛的适用性,具有良好的实际工程应用价值。
Description
技术领域
本发明涉及一对边界元分析后的处理结果进行三维可视化仿真的方法。
背景技术
在工程领域,常需要采用有限元法或边界元分析法等实现对复杂系统中离散模块的求解分析,而三维可视化仿真方法则提供了技术人员研究分析结果的交互手段。
有限元法的基本求解思想是把计算域划分为有限个互不重叠的单元,在每个单元内,选择一些合适的节点作为求解函数的插值点,将微分方程中的变量改写成由各变量或其导数的节点值与所选用的插值函数组成的线性表达式,借助于变分原理或加权余量法,将微分方程离散求解;边界元分析法是在有限元法之后发展起来的一种较精确有效的工程数值分析方法,又称边界积分方程-边界元法,其以定义在边界上的边界积分方程为控制方程,通过对边界分元插值离散,化为代数方程组求解。
现有公开了一种基于有限元分析后处理结果的三维可视化方法,该方法的工作过程是:通过对生成的网格单元体分解,剔除内部的公共数据面,生成外轮廓面集合;对外轮廓面集合进行共面分组,得到共面的单元数据面集合CoMAP;将每一组CoMAP中的所有单元数据面分解成为独立的单元数据边,剔除所有的内部公共边,得到共面轮廓线集合;对所有共面轮廓线集合进行轮廓线分组,将所有形成封闭廓线的边分为一组;最后根据每一组封闭轮廓线生成一个独立的拓扑面,并判断此拓扑面为洞还是表面,对所有的非洞表面执行布尔求和运算,对洞执行布尔求差运算,生成三维模型。该方法是基于有限元分析后的处理结果,该方法对于边界元分析后的处理结果,具有如下缺陷:
1、边界元分析法对模型网格的划分都为三角形单元,而有限元分析的单元种类较多,因此上述方法建立的快速生成算法对边界元分析后的处理结果来说,处理速度不是最优化的。
2、上述方法生成三维模型时并未考虑单个模型下的网格模型、实体模型及云图模型的建立,无法满足后处理三维可视化的完整功能要求。
3、上述方法只是单纯的考虑模型的生成,而未对模型的三维操作做相关研究,无法满足使用者在后处理阶段对模型整体查看、局部放大等视角变化的要求。此外,还存在当前模型坐标系方位指示(参考坐标系的建立)、快捷视景切换等功能的缺失。
4、上述方法未提供截屏出图、云图数值信息显示、计算机显示状态显示等功能,对模型几何信息、数值信息的显示不够,应用领域较为局限。
发明内容
本发明针对上述问题而提供了一种可对边界元分析后的处理结果进行三维可视化仿真的方法。本发明采用的技术手段如下:
本发明的针对边界元分析的三维可视化仿真方法包括:
步骤1:读入建模软件(如:ANSYS、PATRAN、SESAM等)对工程项目进行边界元分析后输出的结果文件,该结果文件包含模型节点坐标信息、单元组织信息及节点数值信息。
步骤2:建立顶点缓冲和索引缓冲,将节点坐标信息和节点数值信息录入顶点缓冲,将单元组织信息录入索引缓冲,生成网格模型、实体模型、云图模型和参考坐标系,如图2所示。在建立顶点缓冲的同时,还记录极值信息,该极值信息一方面为初始视角的建立提供依据,另一方面为云图数值信息提供数据储备。
步骤3:对模型和参考坐标系同步进行渲染、三维操作、或其它操作。其中的三维操作可以包括平移操作、缩放操作、三维球旋转操作、球形旋转操作、定点旋转操作、三向轴旋转操作;其中的其它操作可以包括模型动态切换操作、视图快捷切换操作、截屏出图操作、显卡状态信息数据信息显示操作。
本发明有益效果是:1、由于本发明处理的边界元分析文件仅需输入构建模型和云图的基本信息,对格式没有特殊要求,因而可使用通用商业工程软件(Ansys、Patran、Sesam等)提供输入信息,具有灵活的处理机制和较为广泛的适用性,具有良好的实际工程应用价值;2、本发明采用的模型生成算法和动态切换云图技术考虑了最小化占用显卡资源,对一般工程结构物渲染时间在0.5毫秒以下,完全可以满足高速实时渲染,操作流畅的运行要求,可以流畅地运行在普通硬件配置的计算机环境里;3、考虑边界元三角形网格的特点,本发明采用了32位扩充网格簇容量技术,在64位计算机环境下可接受的最大节点数为4.29×109,完全可以满足工程实际结构物对节点规模的要求;4、发明提供对边界元网格模型、实体模型、云图模型的多种三维操作模式,使得技术人员能形象直观的查看模型状态、分析理解计算数据。此外,本发明提供的截屏、显示状态提示、参考坐标系等功能能够更好得满足设计人员后处理工作的任务要求,具有广泛的应用前景。
附图说明
以下结合附图及实施例,对本发明进行进一步详细说明:
图1为本发明三维可视化仿真方法的流程图。
图2为本发明中结果文件处理部分的流程图。
图3为三维球算法示意图。
图4为屏幕坐标系与模型坐标系位置关系示意图。
具体实施方式
如图1所示,本发明的三维可视化仿真方法包括:
步骤1:读入建模软件(如:ANSYS、PATRAN、SESAM等)对工程项目进行边界元分析后输出的结果文件,该结果文件包含模型节点坐标信息、单元组织信息及节点数值信息。
步骤2:建立顶点缓冲和索引缓冲,将节点坐标信息和节点数值信息录入顶点缓冲,将单元组织信息录入索引缓冲,生成网格模型、实体模型、云图模型和参考坐标系,如图2所示。在建立顶点缓冲的同时,还记录极值信息,该极值信息一方面为初始视角的建立提供依据,另一方面为云图数值信息提供数据储备。
步骤3:对模型和参考坐标系同步进行渲染、三维操作、或其它操作。其中的三维操作可以包括平移操作、缩放操作、三维球旋转操作、球形旋转操作、定点旋转操作、三向轴旋转操作;其中的其它操作可以包括模型动态切换操作、视图快捷切换操作、截屏出图操作、显卡状态信息数据信息显示操作。下面分别予以阐述:
一、当对模型和参考坐标系同步进行渲染操作时,考虑边界元分析的网格特点,采用SlimDX中支持的Triangle List单元作为网格基元,该基元的优点在于可动态的绘制三角形网格,满足边界元分析要求、表达复杂物体时占用和处理时间的效率更高、颜色赋值更为灵活、网格显示效果更加平滑自然等等。为达到良好的云图渲染效果,需自定义SlimDX中顶点缓冲的渲染性质及占用显存的大小,步骤2中建立的顶点缓存是基于位置向量和漫射颜色的顶点缓冲,单个顶点缓冲占用显存大小为16字节,网格内部通过对顶点颜色RGB值的插值计算进行渲染,保证网格内部颜色的平滑过渡。步骤3又包括以下步骤:
步骤301:定义渲染控件;
步骤302:设定SlimDX的初始化参数,该初始化参数包括指定渲染设备、设定Z向深度缓存、设定后台缓冲宽高、指定材质通道、选择消隐模式、设置光照属性等。
步骤303:用网格容器封装步骤2的顶点缓冲和索引缓冲,形成多组网格簇,并写入显存。对于网格模型,生成一组网格簇;对于实体模型,生成两组网格簇;对于云图模型,生成一组网格簇。该步骤可实现模型之间的动态流畅的切换。
步骤304:通过世界矩阵、视图矩阵、投影矩阵设定视角参数,并调整模型初始位置位于屏幕的中心。该调整过程又包括:
步骤3041:计算模型在三向轴的轴方向的极值;
步骤3042:计算模型的几何中心,假设模型在X轴方向的最大值是Xmax,最小值是Xmin,在Y轴方向的最大值是Ymax,最小值是Ymin,在Z轴方向的最大值是Zmax,最小值是Zmin,几何中心坐标是(Xcenter,Ycenter,Zcenter),则有:
Xcenter=(Xmax+Xmin)/2;
Ycenter=(Ymax+Ymin)/2;
Zcenter=(Zmax+Zmin)/2;
步骤3043:通过对世界矩阵三向轴负向移动该几何中心的距离,使得几何中心与屏幕中心重合。
步骤305:显示渲染状态及模型信息。该模型信息包括模型的节点总数、单元总数、云图极值以及云图的数值分配信息。该节点总数、单元总数及云图极值通过SlimDX的二维文字单元结合步骤2中保存的极值信息显示。
云图的数值图谱的颜色范围是根据计算机RGB值线性选取红色至蓝色的20种颜色。本发明对云图的数值图谱的处理过程是:对步骤1中的节点数值信息进行排序,生成20个区间数值;之后利用图形设备接口生成云图数值图谱图片文件,设置图片文件的清晰度、呈现质量,保存在当前文件夹下;将对应的图片文件载入材质单元,设置材质属性;将材质单元封装到SlimDX的二维容器类Sprite中,设置为待渲染状态。
渲染状态指计算机显卡的当前状态,它对渲染刷新帧数及三维操作的流畅度有着直接影响。本发明显示的渲染状态包括:计算机显卡型号、刷新频率、显示屏分辨率及每秒刷新帧数(FPS)值。其中,FPS值是通过计算渲染循环中每一帧耗用的毫秒数求得的。
步骤306:设置容错代码,以防止因为焦点切换、全屏显示等情况产生的渲染失败现象。容错代码一方面为设备丢失添加了事件响应代码,该部分代码的作用是在设备丢失情况发生时释放所有资源,从步骤1开始重新启动设备;另一方面添加结果监视配置,阻止在设备丢失时继续渲染图形。
步骤307:清空帧缓存及深度缓存,设置网格簇渲染的逻辑控制机制,设定模型网格的填充模式(实现网格模型的生成),将绘制好的图像发送至屏幕显示,利用SlimDX的消息循环实现对模型和参考坐标系的循环渲染。本发明的消息处理主要是满足动态流畅切换云图的需要,实现网格簇渲染的逻辑控制。如:在选取云图显示时,消息处理机制将关闭原模型的网格簇渲染通道,开启云图的渲染管道,同时载入步骤305中已写入显存的二维Sprite对象,显示云图数值图谱。此外,消息处理机制还可对当前模型视角截图功能提供支持,实现方式是通过前台缓存获取SlimDX的表面对象,将该表面对象复制至后台缓存,通过后台缓存表面对象的文件生成功能实现图片的保存。
步骤308:释放显存和内存资源。
二、当对模型和参考坐标系同步进行三维操作时,为了解决因分离渲染导致的窗口不透明问题,本发明采用了单位向量投影二维屏幕的方法予以解决,具体实现过程如下:
a.声明二维线段LX、LY、LZ及二维坐标轴文字X、Y、Z,二维坐标待定。
b.在每渲染一帧图像时,声明参考坐标系三向轴单位向量 根据当前视图空间宽高、世界矩阵、视角矩阵、投影矩阵值导入SlimDX的向量投影公式,求得二维屏幕空间三向轴的投影向量
c.将b步骤中三个投影向量的X轴、Y轴坐标分别赋给a步骤声明的二维线段和二维坐标轴文字,实现二维线段、二维文字与参考坐标系的联动。
d.隐藏原参考坐标系的显示,即可实现透明条件下参考坐标系的建立。
当对模型和参考坐标系同步进行平移操作时,步骤3又包括以下步骤:
步骤309:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold)。
步骤310:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew)。
步骤311:计算鼠标拖动距离与模型移动距离之间的移动系数,选取0.025作为基准,计算当前视点向量与焦点向量的向量差值长度,求得移动系数
步骤312:获取当前视图矩阵(4x4),利用下述公式求得移动后视点向量与焦点向量的值:
Xview=-ΔM*[(Xnew-Xold)*M11-(Ynew-Yold)*M12]
Yview=-ΔM*[(Xnew-Xold)*M21-(Ynew-Yold)*M22]
Zview=-ΔM*[(Xnew-Xold)*M31-(Ynew-Yold)*M32]
其中,Mxy代表视图矩阵第x行第y列的元素值。
考虑平移的效果要求,需同等变换视点向量与焦点向量因此令焦点向量
步骤313:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现持续平移效果。
当对模型和参考坐标系同步进行缩放操作时,步骤3又包括以下步骤:
步骤314:当滚动鼠标滚轮时,判断鼠标轮滚动的制动器数的正负,正视为缩进当前视角,负视为拉伸当前视角。
步骤315:计算当前视点向量与焦点向量的向量差值的单位向量若步骤314判断制动器数为负,则向量差值的单位向量
步骤316:迭加视点向量实现持续缩放效果。
当对模型和参考坐标系同步进行三维球旋转操作时,步骤3又包括以下步骤:
步骤317:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold),该点定义为A点。
步骤318:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew),该点定义为B点。
步骤319:根据三维球算法,视模型处于一球体内,如图3所示,该球体的旋转轴为A点到B点的移动轨迹处于该球体的半球内,计算A点和B点的坐标,以及旋转轴和为与的夹角,该夹角为旋转角。计算过程为:
假设R为该球体的半径,W为屏幕宽度,S为当前的鼠标点坐标离屏幕中心的二维距离,则有:R=W/2,且:
若S=R2-(Xold-R)2-(Yold-R)2≤0,则:
若S-R2-(Xold-R)2-(Yold-R)2>0,则:
若S=R2-(Xnew-R)2-(Ynew-R)2≤0,则:
若S=R2-(Xnew-R)2-(Ynew-R)2>0,则:
利用上述公式,求得A点和B点的坐标;旋转轴旋转角旋转角设置为2倍是为了在鼠标点击视图的左中边缘拖动至视图右中边缘时实现模型以Y轴为旋转轴旋转一周。
步骤320:根据步骤319得到的旋转轴和旋转角,利用SlimDX定轴旋转创建矩阵MatrixR。
步骤321:提取模型坐标系及参考坐标系的世界矩阵World,Worldaxis,计算旋转矩阵转换后的世界矩阵World′,World′axis,表示为:
World′=World*MatrixR
World′axis=World′axis*MatrixR。
步骤322:将转换后的世界矩阵赋给渲染单元,采用上述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置。
步骤323:跟踪经过旋转矩阵转换后的三向轴单位向量,具体如下:
由于MatrixR矩阵为4x4矩阵,本发明对三向轴单位向量由三维提升至四维,提取结果时忽略第四维数值即可。
步骤324:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现连续三维球旋转效果。
当对模型和参考坐标系同步进行球形旋转操作时,步骤3又包括以下步骤:
步骤325:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold)。
步骤326:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew)。
步骤327:考虑模型坐标系与屏幕坐标系的关系,如图4所示。利用二维坐标(Xold,Yold)和二维坐标(Xnew,Ynew)计算期望达到的、模型坐标系原点与屏幕坐标系原点之间的连线绕模型坐标系X轴的转角αx=(Xnew-Xold)*2π/W,和绕模型坐标系Y轴的转角αy=(Ynew-Yold)*2π/H,其中,屏幕宽度为W,屏幕高度为H。
步骤328:计算模型坐标系原点与屏幕坐标系原点之间的距离
步骤329:获取当前视图矩阵(4x4),利用SlimDX中的定轴旋转方法,求得模型坐标系原点与屏幕坐标系原点之间的向量经过绕屏幕坐标系横轴O′X′的旋转αy角,绕屏幕坐标系纵轴O′Y′旋转αx角后的向量
步骤330:计算视点向量通过SlimDX的创建左手坐标系方法用该视点向量替代原视点向量
步骤331:为保证参考坐标系的同步旋转,对参考坐标系视图矩阵执行与步骤329、步骤330相同的变换,并采用上述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置。
步骤332:将当前鼠标二维坐标赋值为(Xold,Yold),清空(Xnew,Ynew)的的坐标值,如此循环,实现连续的球形旋转效果。
当对模型和参考坐标系同步进行定点旋转操作时,步骤3又包括以下步骤:
步骤333:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold)。
步骤334:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew)。
步骤335:考虑模型坐标系与屏幕坐标系的关系,如图4所示。利用二维坐标(Xold,Yold)和二维坐标(Xnew,Ynew)计算期望达到的、模型坐标系原点与屏幕坐标系原点之间的连线绕模型坐标系X轴的转角αx=(Xnew-Xold)*2π/W,和绕模型坐标系Y轴的转角αy=(Ynew-Yold)*2π/H,其中,屏幕宽度为W,屏幕高度为H。
步骤336:利用SlimDX定轴旋转创建矩阵MatrixR。
步骤337:提取模型坐标系及参考坐标系的世界矩阵,分别为World,Worldaxis,计算变换后的模型坐标系下世界矩阵World′=World*MatrixR,计算变换后的参考坐标系下世界矩阵World′axis=World′axis*MatrixR。
步骤338:将步骤337得到的世界矩阵赋给渲染单元,同时采用上述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置。
步骤339:跟踪经过旋转矩阵变换的三向轴单位向量,具体为:
由于MatrixR矩阵为4x4矩阵,本发明对三向轴单位向量由三维提升至四维,提取结果时忽略第四维数值即可。
步骤340:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现连续的定点旋转效果。
当对模型和参考坐标系同步进行三向轴旋转操作时,步骤3又包括以下步骤:
步骤341:声明参考坐标系中的三向轴单位向量
步骤342:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold);在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew)。判断Xnew-Xold是否大于0,是则旋转角为否则
步骤343:根据其他三维操作中对三向轴单位向量的跟踪记录,得到当前经过旋转变换后的三向轴单位向量
步骤344:利用SlimDX定轴旋转创建矩阵MatrixR,旋转轴为步骤343中三向轴单位向量,旋转角为步骤342中求得的旋转角。
步骤345:提取模型坐标系及参考坐标系的世界矩阵,分别为World,Worldaxis,计算变换后的模型坐标系下世界矩阵World′=World*MatrixR,计算变换后的参考坐标系下世界矩阵World′axis=World′axis*MatrixR。
步骤346:将步骤345计算得到的世界矩阵赋给渲染单元,同时采用上述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置。
步骤347:跟踪经过旋转矩阵变换的三向轴单位向量,具体为:
由于MatrixR矩阵为4x4矩阵,本发明对三向轴单位向量由三维提升至四维,提取结果时忽略第四维数值即可。
步骤348:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现连续的三向轴旋转效果。
三、当对模型和参考坐标系同步进行视图快捷切换操作时,本发明定义四种快捷视图,包括主视图、俯视图、侧视图和斜视图,则步骤3又包括以下步骤:
步骤349:模型坐标系和参考坐标系的世界矩阵初始化居中,根据四种视图角度采用SlimDX的绕轴旋转方法进行旋转变换。
步骤350:初始化模型坐标系和参考坐标系的视图矩阵和投影矩阵。
步骤351:采用上述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置。
步骤352:初始化三向轴单位向量
步骤353:将步骤349中的旋转记录为旋转矩阵MatrixR,跟踪经过旋转矩阵变换的三向轴单位向量,具体为:
这里由于MatrixR矩阵为4x4矩阵,本发明的处理办法是对三向轴单位向量由三维提升至四维,提取结果时忽略第四维数值。
本发明的上述流程优选使用C#语言结合开源的SlimDX框架混合编程,并基于.NET Framework 4.0平台和DirectX 9.0c接口实现。在架构设计方面,采用数据-视图-控制(MVC)模式,该模式是三维软件开发业界内较为成熟应用的模式,具有设计清晰、易于扩展、运用可分布等适合多用户、可扩展、可维护、高交互等优点。该模式具体到本软件中,实现方式如下:
首先,数据模块封装了边界元分析结果的数据信息,考虑到边界元模型的特点,因此数据模块中包含了三角形数据信息及云图显示所需的数值信息,主要负责对边界元分析结果的读入及三维渲染模块顶点缓冲及索引缓冲的录入。其同时作为整个程序的入口和后续程序的接口。利用面向对象的软件设计方法,将问题领域里的对象抽象为应用程序对象,在这些抽象的对象中封装对象的属性、操作对象的方法和这些对象隐含的逻辑。该数据模块的作用是:
a.抽象应用程序的功能,封装程序数据的结构和操作;
b.向控制模块导入网格簇,提供对三维渲染功能的访问支持;
c.接受视图模块的查询访问要求,提供对视图模块的响应事件。
其次,视图模块在本发明中负责管理与用户交互的软件图形界面以及三位场景渲染区,包括软件的主界面、各个功能对话框和模块化的图形渲染引擎,视图并不直接修改数据模型,任何数据模型的变动,都会通过内置的事件响应机制传递给视图模块,并在用户界面或渲染区内反映这种变化。它是数据模块的外在表现,对三维程序来说,视图模块指菜单、按钮、控件、选择按钮、渲染窗口等。本视图模块具有与外界交互的功能,是应用系统与外界的接口,一方面为外界提供了输入通道并触发应用逻辑运行;另一方面又将逻辑运行的结果以某种形式显示给外界。该视图模块的作用是:
a.对数据的表现部分进行抽象。
b.将数据展现给用户,获得用户请求。
c.将用户请求发送给控制器。
d.当接到来自模型的数据已更新的通知时,更新视图显示。
最后,控制模块主要处理两类事件,一是处理用户对图形界面的操作,比如对菜单或工具栏的点击。另一种是渲染区内用户的鼠标键盘事件,比如鼠标左键平移、右键旋转、滚轮缩放等等。因为这些事件源于用户的操作,直接作用在视图模块上,如果需要对数据模型进行改变,则必须通过控制模块来通知数据模块,调用相应的方法响应这些事件。上层的用户界面与底层的数据模型之间的相互通信必须通过控制模块来传递。控制模块是联系数据模块和视图模块的纽带,通过提取视图发送过来的外部信息,将用户与视图模块的交互转换为基于应用程序行为的逻辑事件,从而将该逻辑事件解析为后台渲染通道及计算机系统应采取的响应策略。该控制模块的作用是:
a.抽象用户交互和应用程序逻辑的映射。
b.将用户在视图模块的输入翻译为应用程序的响应事件,从而更新数据模块的表现形式。
Claims (9)
1.一种针对边界元分析的三维可视化仿真方法,其特征在于包括以下步骤:
步骤1:读入边界元分析后输出的结果文件,该结果文件包含模型节点坐标信息、单元组织信息及节点数值信息;
步骤2:建立顶点缓冲和索引缓冲,将节点坐标信息和节点数值信息录入顶点缓冲,将单元组织信息录入索引缓冲,生成网格模型、实体模型、云图模型和参考坐标系;
步骤3:对模型和参考坐标系同步进行渲染、三维操作、或其它操作,所述三维操作包括平移操作、缩放操作、三维球旋转操作、球形旋转操作、定点旋转操作、三向轴旋转操作;所述其它操作包括视图快捷切换操作、模型动态切换操作、截屏出图操作、显卡状态信息及数值信息显示操作;
当对模型和参考坐标系同步进行渲染操作时,步骤2在建立顶点缓冲的同
时,还记录极值信息,步骤3又包括:
步骤301:定义渲染控件;
步骤302:设定SlimDX的初始化参数;
步骤303:用网格容器封装步骤2的顶点缓冲和索引缓冲,形成多组网格簇,并写入显存;
步骤304:通过世界矩阵、视图矩阵、投影矩阵设定视角参数,并调整模型初始位置位于屏幕的中心;
步骤305:显示渲染状态及模型信息,该模型信息包括模型的节点总数、单元总数、云图极值以及云图的数值分配信息;该节点总数、单元总数及云图极值通过SlimDX的二维文字单元结合步骤2中保存的极值信息显示;
步骤306:设置容错代码;
步骤307:清空帧缓存及深度缓存,设置网格簇渲染的逻辑控制机制,设定模型网格的填充模式,将绘制好的图像发送至屏幕显示,利用SlimDX的消息循环实现对模型和参考坐标系的循环渲染;
步骤308:释放显存和内存资源。
2.根据权利要求1所述的方法,其特征在于步骤304又包括以下步骤:
步骤3041:计算模型在三向轴的轴方向的极值;
步骤3042:计算模型的几何中心,假设模型在X轴方向的最大值是Xmax,最小值是Xmin,在Y轴方向的最大值是Ymax,最小值是Ymin,在Z轴方向的最大值是Zmax,最小值是Zmin,几何中心坐标是(Xcenter,Ycenter,Zcenter),则有:
Xcenter=(Xmax+Xmin)/2;
Ycenter=(Ymax+Ymin)/2;
Zcenter=(Zmax+Zmin)/2;
步骤3043:通过对世界矩阵三向轴负向移动该几何中心的距离,使得几何中心与屏幕中心重合。
3.根据权利要求1所述的方法,其特征在于当对模型和参考坐标系同步进行三维操作时,采用单位向量投影二维屏幕的算法,包括:
a.声明二维线段LX、LY、LZ及二维坐标轴文字X、Y、Z,二维坐标待定;
b.在每渲染一帧图像时,声明参考坐标系三向轴单位向量根据当前视图空间宽高、世界矩阵、视角矩阵、投影矩阵值导入SlimDX的向量投影公式,求得二维屏幕空间三向轴的投影向量
c.将b步骤中三个投影向量的X轴、Y轴坐标分别赋给a步骤声明的二维线段和二维坐标轴文字,实现二维线段、二维文字与参考坐标系的联动;
d.隐藏原参考坐标系的显示,即可实现透明条件下参考坐标系的建立。
4.根据权利要求3所述的方法,其特征在于当对模型和参考坐标系同步进行平移操作时,步骤3又包括以下步骤:
步骤309:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold);
步骤310:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew);
步骤311:计算鼠标拖动距离与模型移动距离之间的移动系数,选取0.025作为基准,计算当前视点向量与焦点向量的向量差值长度,求得移动系数
步骤312:获取当前视图矩阵(4x4),利用下述公式求得移动后视点向量与焦点向量的值:
Xview=-ΔM*[(Xnew-Xold)*M11-(Ynew-Yold)*M12]
Yview=-ΔM*[(Xnew-Xold)*M21-(Ynew-Yold)*M22]
Zview=-ΔM*[(Xnew-Xold)*M31-(Ynew-Yold)*M32]
其中,Mxy代表视图矩阵第x行第y列的元素值,
步骤313:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现持续平移效果;
当对模型和参考坐标系同步进行缩放操作时,步骤3又包括以下步骤:
步骤314:当滚动鼠标滚轮时,判断鼠标轮滚动的制动器数的正负,正视为缩进当前视角,负视为拉伸当前视角;
步骤315:计算当前视点向量与焦点向量的向量差值的单位向量若步骤314判断制动器数为负,则向量差值的单位向量
步骤316:迭加视点向量实现持续缩放效果。
5.根据权利要求3所述的方法,其特征在于当对模型和参考坐标系同步进行三维球旋转操作时,步骤3又包括以下步骤:
步骤317:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold),该点定义为A点;
步骤318:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew),该点定义为B点;
步骤319:根据三维球算法,视模型处于一球体内,该球体的旋转轴为A点到B点的移动轨迹处于该球体的半球内,计算A点和B点的坐标,以及旋转轴和为与的夹角,该夹角为旋转角,计算过程为:
假设R为该球体的半径,W为屏幕宽度,S为当前的鼠标点坐标离屏幕中心的二维距离,则有:R=W/2,且:
若S=R2-(Xold-R)2-(Yold-R)2≤0,则:
若S=R2-(Xold-R)2-(Yold-R)2>0,则:
若S-R2-(Xnew-R)2-(Ynew-R)2≤0,则:
若S=R2-(Xnew-R)2-(Ynew-R)2>0,则:
利用上述公式,求得A点和B点的坐标;旋转轴旋转角
步骤320:根据步骤319得到的旋转轴和旋转角,利用SlimDX定轴旋转创建矩阵MatrixR;
步骤321:提取模型坐标系及参考坐标系的世界矩阵World,Worldaxis,计算旋转矩阵转换后的世界矩阵World′,World′axis,表示为:
World′=World*MatrixR
World′axis=World′axis*MatrixR;
步骤322:将转换后的世界矩阵赋给渲染单元,采用所述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置;
步骤323:跟踪经过旋转矩阵转换后的三向轴单位向量,具体如下:
步骤324:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现连续三维球旋转效果。
6.根据权利要求3所述的方法,其特征在于当对模型和参考坐标系同步进行球形旋转操作时,步骤3又包括以下步骤:
步骤325:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold);
步骤326:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew);
步骤327:计算期望达到的、模型坐标系原点与屏幕坐标系原点之间的连线绕模型坐标系X轴的转角αx=(Xnew-Xold)*2π/W,和绕模型坐标系Y轴的转角αy=(Ynew-Yold)*2π/H,其中,屏幕宽度为W,屏幕高度为H;
步骤328:计算模型坐标系原点与屏幕坐标系原点之间的距离
步骤329:获取当前视图矩阵(4x4),利用SlimDX中的定轴旋转方法,求得模型坐标系原点与屏幕坐标系原点之间的向量经过绕屏幕坐标系横轴O′X′的旋转αy角,绕屏幕坐标系纵轴O′Y′旋转αx角后的向量
步骤330:计算视点向量通过SlimDX的创建左手坐标系方法用该视点向量替代原视点向量
步骤331:对参考坐标系视图矩阵执行与步骤329、步骤330相同的变换,并采用所述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置;
步骤332:将当前鼠标二维坐标赋值为(Xold,Yold),清空(Xnew,Ynew)的的坐标值,如此循环,实现连续的球形旋转效果。
7.根据权利要求3所述的方法,其特征在于当对模型和参考坐标系同步进行定点旋转操作时,步骤3又包括以下步骤:
步骤333:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold);
步骤334:在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew);
步骤335:计算期望达到的、模型坐标系原点与屏幕坐标系原点之间的连线绕模型坐标系X轴的转角αx=(Xnew-Xold)*2π/W,和绕模型坐标系Y轴的转角αy=(Ynew-Yold)*2π/H,其中,屏幕宽度为W,屏幕高度为H;
步骤336:利用SlimDX定轴旋转创建矩阵MatrixR;
步骤337:提取模型坐标系及参考坐标系的世界矩阵,分别为World,Worldaxis,计算变换后的模型坐标系下世界矩阵World′=World*MatrixR,计算变换后的参考坐标系下世界矩阵World′axis=World′axis*MatrixR;
步骤338:将步骤337得到的世界矩阵赋给渲染单元,同时采用所述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置;
步骤339:跟踪经过旋转矩阵变换的三向轴单位向量,具体为:
步骤340:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现连续的定点旋转效果。
8.根据权利要求3所述的方法,其特征在于当对模型和参考坐标系同步进行三向轴旋转操作时,步骤3又包括以下步骤:
步骤341:声明参考坐标系中的三向轴单位向量
步骤342:在鼠标按下时,记录当前鼠标的二维坐标(Xold,Yold),在每一帧图形渲染时记录鼠标拖动后的二维坐标(Xnew,Ynew),判断Xnew-Xold是否大于0,是则旋转角为 否则
步骤343:根据其他三维操作中对三向轴单位向量的跟踪记录,得到当前经过旋转变换后的三向轴单位向量
步骤344:利用SlimDX定轴旋转创建矩阵MatrixR,旋转轴为步骤343中三向轴单位向量,旋转角为步骤342中求得的旋转角;
步骤345:提取模型坐标系及参考坐标系的世界矩阵,分别为World,Worldaxis,计算变换后的模型坐标系下世界矩阵World′=World*MatrixR,计算变换后的参考坐标系下世界矩阵World′axis=World′axis*MatrixR;
步骤346:将步骤345计算得到的世界矩阵赋给渲染单元,同时采用所述单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置;
步骤347:跟踪经过旋转矩阵变换的三向轴单位向量,具体为:
步骤348:将当前鼠标二维坐标赋为(Xold,Yold),清空(Xnew,Ynew)坐标值,如此循环,实现连续的三向轴旋转效果。
9.根据权利要求1所述的方法,其特征在于当对模型和参考坐标系同步进行视图快捷切换操作时,快捷视图包括主视图、俯视图、侧视图和斜视图,步骤3又包括以下步骤:
步骤349:模型坐标系和参考坐标系的世界矩阵初始化居中,根据四种视图角度采用SlimDX的绕轴旋转方法进行旋转变换;
步骤350:初始化模型坐标系和参考坐标系的视图矩阵和投影矩阵;
步骤351:采用单位向量投影二维屏幕的算法得到投影后的参考坐标轴和文字位置;
步骤352:初始化三向轴单位向量
步骤353:将步骤349中的旋转记录为旋转矩阵MatrixR,跟踪经过旋转矩阵变换的三向轴单位向量,具体为:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210347865.6A CN102902848B (zh) | 2012-09-18 | 2012-09-18 | 针对边界元分析的三维可视化仿真方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210347865.6A CN102902848B (zh) | 2012-09-18 | 2012-09-18 | 针对边界元分析的三维可视化仿真方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102902848A CN102902848A (zh) | 2013-01-30 |
CN102902848B true CN102902848B (zh) | 2015-04-22 |
Family
ID=47575078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210347865.6A Active CN102902848B (zh) | 2012-09-18 | 2012-09-18 | 针对边界元分析的三维可视化仿真方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102902848B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SG11201605983TA (en) | 2013-05-31 | 2016-09-29 | Dirtt Environmental Solutions | Associating computer-executable objects with three-dimensional spaces within an architectural design environment |
CN104699692B (zh) * | 2013-12-04 | 2018-06-15 | 华为技术有限公司 | 一种处理数据的方法和装置 |
CN103824255B (zh) * | 2014-02-28 | 2017-02-22 | 武汉大学 | 基于Sharpmap的通过鼠标滚轮控制地图缩放方法 |
US10922450B2 (en) | 2014-06-09 | 2021-02-16 | Dirtt Environmental Solutions, Ltd. | Associating computer-executable objects with timber frames within an architectural design environment |
CN105320396B (zh) * | 2014-10-31 | 2019-08-09 | 深圳市雅都软件股份有限公司 | 平面图形单维度局部关联缩放显示系统及方法 |
CN105321148B (zh) * | 2014-11-26 | 2019-08-09 | 深圳市雅都软件股份有限公司 | 多区域关联缩放显示k线图或美国线图的方法及系统 |
CN105243238B (zh) * | 2015-11-06 | 2018-06-29 | 中国电子科技集团公司第三十八研究所 | 一种一体化快速产品迭代成形装置及其方法 |
CN107633544B (zh) * | 2016-07-14 | 2021-01-26 | 网易(杭州)网络有限公司 | 环境光遮蔽的处理方法及装置 |
CN109191365B (zh) * | 2018-06-27 | 2022-11-25 | 杭州电子科技大学 | 一种基于有向长方体的三维空间手写字符维数约简方法 |
CN109857312B (zh) * | 2019-02-28 | 2021-04-20 | 北京瓴域航空技术研究院有限公司 | 一种二三维融合空域可视化编辑方法 |
CN110223375B (zh) * | 2019-05-07 | 2023-02-03 | 深圳供电局有限公司 | 一种机房3d可视化数据处理的方法及系统 |
CN110569620B (zh) * | 2019-09-17 | 2022-11-11 | 哈尔滨千帆科技有限公司 | 一种混合模型的动态可视化系统及方法 |
CN110795491B (zh) * | 2019-11-05 | 2023-06-06 | 上海波客实业有限公司 | 一种结构参数信息可视化方法 |
CN114371809A (zh) * | 2021-12-14 | 2022-04-19 | 南京中孚信息技术有限公司 | 一种基于Vue的大屏可视化模块拖拽技术的研究 |
CN117115330B (zh) * | 2023-10-25 | 2024-01-23 | 成都之维安科技股份有限公司 | 一种web端地图连续时间线的扩散效果可视化渲染方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1753030A (zh) * | 2005-10-20 | 2006-03-29 | 北京航空航天大学 | 一种面向三维建模的人机交互框架 |
CN102663829A (zh) * | 2012-03-20 | 2012-09-12 | 中国科学院微电子研究所 | 一种实现三维模型矩阵变换的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8655632B2 (en) * | 2009-09-03 | 2014-02-18 | Schlumberger Technology Corporation | Gridless geological modeling |
-
2012
- 2012-09-18 CN CN201210347865.6A patent/CN102902848B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1753030A (zh) * | 2005-10-20 | 2006-03-29 | 北京航空航天大学 | 一种面向三维建模的人机交互框架 |
CN102663829A (zh) * | 2012-03-20 | 2012-09-12 | 中国科学院微电子研究所 | 一种实现三维模型矩阵变换的方法 |
Non-Patent Citations (2)
Title |
---|
"一种基于ANSYS和FLUENT的海洋立管的涡激响应分析方法";任大朋等;《中国海洋平台》;20070831;第22卷(第4期);第32-36页 * |
"铝合金船体阴极保护系统的数值模拟仿真";方志刚等;《船舶工程》;20120831;第73-76页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102902848A (zh) | 2013-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102902848B (zh) | 针对边界元分析的三维可视化仿真方法 | |
CN105487848B (zh) | 一种3d应用的显示刷新方法及系统 | |
CN106600679A (zh) | 一种三维模型数据简化的方法 | |
CN101414383B (zh) | 图像处理设备和图像处理方法 | |
CN103413343B (zh) | 一种3d图像动画引擎 | |
CN105718643A (zh) | 一种基于最优化视角的船舶生产设计审图器实现方法 | |
CN105528207A (zh) | 一种虚拟现实系统及其中显示安卓应用图像的方法和装置 | |
Zhang et al. | A real-time interactive simulation framework for watershed decision making using numerical models and virtual environment | |
CN106548500A (zh) | 一种基于gpu的二维态势图像处理方法及装置 | |
CN105190701A (zh) | 基于原语的合成 | |
CN110276823A (zh) | 基于光线追踪且实时可交互的集成成像生成方法及系统 | |
CN103426199A (zh) | 一种三维几何场景的低噪声实时全局光照绘制方法 | |
CN105913475A (zh) | 一种时空变化过程动态可视化方法 | |
CN107436765A (zh) | 视图控件的处理方法和装置 | |
Toledo et al. | Hierarchical level of detail for varied animated crowds | |
CN114373058A (zh) | 一种基于虚幻引擎的海面网格动态划分及高度场生成方法 | |
CN111091620A (zh) | 基于图形学的地图动态路网处理方法及系统、计算机设备 | |
CN103325086B (zh) | 一种基于四面体坐标系的三维图形的变形方法 | |
CN103678888A (zh) | 一种基于欧拉流体模拟算法的心脏血液流动示意显示方法 | |
CN106780716A (zh) | 历史文化遗产数字化展示方法 | |
CN116543086A (zh) | 神经辐射场处理方法、装置及电子设备 | |
Döllner | Geovisualization and real-time 3D computer graphics | |
Hu et al. | Research on 3d interactive model selection and customization of ceramic products based on big data cloud service platform | |
Zhao et al. | Visual analysis of three-dimensional flow field based on WebVR | |
Wang et al. | LVDIF: a framework for real-time interaction with large volume data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |