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,各顶点的颜色值由参数值转化成颜色索引值确定,并由向量模式给出。自动提取底面数据并绘制底面的程序段为: