对应的索引号
以上创建出来的颜色可能较单调,一些位于中间部分的参数值对应的颜色区别不明显。一种改进方法是将彩色表分成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,各顶点的颜色值由参数值转化成颜色索引值确定,并由向量模式给出。自动提取底面数据并绘制底面的程序段为:
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所示。
切块功能和切片功能类似,但得到的不是一个面,而是一个数据体。该功能的第一步和切片功能相似,要得到切割点在OpenGL中的坐标。第二步画数据体图形的时候,不再是只画其中的一个面,而是要画数据体的6个面,因此该功能和切片、旋转等功能综合使用时,要注意功能标志的设置问题。利用某油田数据绘制的切块图如图4所示。
5 结语提出了一种基于OpenGL建立三维油藏地质数据模型的简便方法,在根据实际要求创建彩色表并将原始物性参数转化为颜色索引值的基础上,可自动提取网格数据体可视面上的数据,然后利用OpenGL绘图技术对模型绘制。与传统的三维油藏可视化软件系统比较,这里提出的系统绘制效率更高,特别是对模型进行拨层、切片、切块等操作处理是该系统的特色。