微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 基于OpenGL的三维油藏可视化模型

基于OpenGL的三维油藏可视化模型

时间:06-23 来源:互联网 点击:
1 引言
通过地震、测井可得到关于油藏地层测试点孔隙度、渗透率等物性参数,但这些数据数量庞大,难以直接进行地质分析。为了解油层结构和分布,需要将油藏地层模型在计算机上再现,并对其进行一些交互式操作及初步处理。
系统实现方法是:首先组织数据(几何顶点,物性参数值等)及提取可视面,并与所需要的目标结合,实现对模型的绘制。其次,提供对模型的分解和剖切方法,实现由数据驱动的对模型的操作控制。

2 数据处理与参数的颜色索引
2.1 系统的地质数据
系统读入的原始网格数据示例如下:


第一行数据的前3个数据数据分别表示X,Y,Z轴方向上的网格个数,第4~6个数据分别表示X,Y,Z轴方向上的原点坐标,而第7~8个数据表示沿X,Y轴方向的网格间距大小。第二行数据2表示以下是两列数据,第一列数据(如940.700)表示深度值,第二列数据(如73.000)表示对应点的参数值。
由于网格结点在xoy平面上是规则的顺序排列,给出已知的沿x,y方向的网格间距dx,dy,网格数Nx,Ny和几何坐标系原点坐标x0,y0,z0,则任一网格结点Node的空间坐标和参数为:


式中:i的范围为[O,Nx-1],j的范围为[0,Ny-1];k为结点Node(i,j)处深度的序数,其值与深度的排列方式有关。dpk,sk为第k点处的深度和物性参数。
2.2 处理原始数据
由于原始数据采用大地坐标,为方便绘图,应对数据进行坐标变换。将X,Y,Z上数据范围变换到-1~1之间,经过缩放变换,才能在视图区显示出图形。原始数据在测量时可能存在误差,因此在读入数据后需对数据进行有效性检验。
2.3 参数的颜色索引
OpenGL的颜色索引模式通过建立一个颜色索引表(又称彩色表)确定所绘制物体的颜色。彩色表的建立可通过指定彩色表两端的基色和尾色,插值计算出中间其它颜色,分别赋予相应索引号。在给模型着色时,将读人数据点对应的参数值转化成彩色表上的索引号,便可确定参数的颜色。由于彩色表上的索引号对应的参数是离散的,应对参数值在彩色表中对应的位置作四舍五人以精确给出其索引号。设参数存储在数组parameter中,color_num为彩色表长度。将参数转化为颜色索引号p的代码段如下:

对应的索引号

以上创建出来的颜色可能较单调,一些位于中间部分的参数值对应的颜色区别不明显。一种改进方法是将彩色表分成4段,每一段只控制一种颜色分量的变化,这样彩色表的颜色变化种类大大增加了,使位于中间部分的参数值颜色区分很明显,可更直观的反映出油藏情况。
基色和尾色通常根据油藏描述的实际要求指定,例如类蓝色(表示水)和类红色(表示油),分别对应物性参数(如渗透率)的最小值和最大值。

3 建立三维地质数据模型
3.1 绘制三维地质模型的基本思想
实现三维地质模型绘制的关键步骤是对数据体建模。由对读入数据的排列结构分析可知,原始网格数据形成了一个三维地层模型。除了在垂直方向(Z方向)上的两个面有上下起伏外,其余的面均是平行于ZOY,面或ZOX面的平面。如图1所示。

地层模型的可视面即底面、顶面、左面、右面、前面及后面,因此只画这6个面的外侧就可以绘制出整个6面体。问题便转化成提取这6个面上的数据,用OpenGL的绘图技术对每一个面分别进行绘制。
3.2 三维地质数据体模型的生成
模型立方体的6个面由很多小4边形组成,可采用OpenGL画连续4边形的方法将每一个面画出来。填充颜色则可采用OpenGL的平滑(SMOOTH)着色方式,定义出顶点的颜色后,OpenGL便自动地对4边形内的颜色插值计算,进行颜色渐变绘制。着色之前采用Z缓存(Z_buffer)技术通过对物体进行深度测试的方法实现消隐。
以底面创建为例,考虑一般情况,设x轴上的网格个数为x_lenth,z轴的数据存储在数组z_data中,当前绘制的4边形片序数为循环变量j,各顶点的颜色值由参数值转化成颜色索引值确定,并由向量模式给出。自动提取底面数据并绘制底面的程序段为:


其中,函数getparaindex()返回对应参数的颜色索引值。底面绘制完成后,以此类推,可提取其它可视面数据(顶点及其排列顺序),同样对其它可视面进行绘制、消隐和着色,由此生成三维油藏地质模型。

4 模型操作
4.1 数据体拨层
通过对数据体进行拨层,即沿Z轴分解数据体的层面,按层提取并绘制数据体的可视面,可以得到拨层面的图形,还可以得到拨层后数据块的图形。拨层面的绘制可通过绘制数据体被拨层后的顶面图形实现。在VC中使用Slider控件传递参数,确定显示拨层面操作的次数,这样可显示多个拨层面,通过旋转等操作,可清楚的看出拨层面之间的油藏情况,如图2所示。

4.2 切片和切块
通过对数据体切片,即切割数据体的X轴、Y轴,得到剖面或截面的图形。垂直于X轴、Y轴的一系列的切割点的位置由Visual C++中的鼠标响应程序得到,而切割点的颜色通过切割点两旁的网格数据点的颜色插值得到。这其中须注意两个问题:①Visual C++中数据和OpenGL中数据的转化。因通过双击鼠标左键选择切割点,得到的是VC中的响应坐标,需要把其转化成OpenGL中的坐标。由变换语句glFrustum();可知在OpenGL中窗口的宽和高,而且可知VC中窗口的大小,因此二者之间存在一个比例关系,再考虑X轴、Y轴的长度因素,可得到切割点在OpenGL中的坐标。②关于得到切割点颜色。OpenGL中采取平滑模式(GL_SMOOTH)时,给定多边形内各点的颜色是通过顶点颜色插值得到的。因此,当切割点选择在给定网格点之间时,切割点的颜色可通过颜色捕值得到。绘制时需注意顶点和颜色的对应关系。利用某油田数据绘制的切片图如图3所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top