利用 OpenGL 实现内插算法可视化
摘 要 OpenGL 是一种交互式 计算 机图形系统,具有绘制三维图形的功能,能高效地编
写出可操纵图形硬件的程序,支持三维可视化的实现。本文以 OpenGL 为基础,对可视化
技术进行 研究 ,重点讨论了内插算法,结合 OpenGL 中视点的定义,通过 OpenGL 的函数
来实现。 关键词 OpenGL 可视化 内插算法 1 引言 为了便于对算法实现进行测试
和效果 分析 ,我们依据图 1 进行离散点采样。在图 1 中,地形面积为 ,其等高线分布如
图所示,A 点和 B 点为两座山的顶峰,其中 A 点高程值为 ,B 点高程值为 。我们
将采样得到的离散点按照一定的规则存放在*.dem 的文件中,通过读取文件中的数据来获
取离散点的高程值。我们通过采样 10 或 20 个点生成 的 DEM 格网模型。图 1 测试地形
等高线图 2 内插算法的可视化的实现 读取文件中离散点数据 离散点数据包括
平面位置和高程两种信息,可以直接在野外通过全站仪或者 GPS、激光测距仪等进行测量
,也可以间接地从航空影像或者遥感图象以及既有地形图上得到。具体采用何种数据源和
相应的测量技术,一方面取决于这些源数据的可获得性,另一方面也取决于 DEM 的分辨
率、精度要求、数据量大小和技术要求等。 对于离散点的数据,往往是很大的,我们只
有按照一定数据结构存储在*.dem 文件中,才能便于管理和修改。在程序中通过读取文件
,可以得到任意一个文件中的地形信息。为了测试的需要,依据图 1 中的等高线我们可以
采集到一些特征点的三维信息。例如,我们采集 10 个点的信息,将其存入文件中,其结
构如下所示:10
9.
0 在实例中每个数
据按照 5 个字符来存储。第一个数据为采样离散点的总数,第二到第九个数据分别为所选
地形左下、左上、右上、右下点的平面 X 和 Y 的坐标,第十和第十一个数据为地形的最小
高程值和最大高程值,余下的数据每三个为采样离散点的三维坐标 X、Y 和 Z,共有十个
。 在 LoadFileData 类中,需要先定义如下:public int DataNum; //离散点的总数 public
double[,] DataPoint=new double [50,3]; //离散数据点的三维坐标 int
readDemPosition; // 读取位置 string DemFileContent; //DEM 文件 内容 public struct
Point{public double x; public double y;}public struct DEMStruct{public
Point LeftBottom;public Point LeftTop; public Point RightTop; public
Point RightBottom; public double MinElevation; public double
MaxElevation;} public DEMStruct DemDataStruct;//存储*.dem 文件中前十一个数据
同时在主程序中,还需要调用如下两个读取 int 型和 double 型的函数:private int
readInt() { string tmps ; tmps =
(readDemPosition,5); readDemPosition += 5; return
( (tmps)); } private double readDouble() { string
tmps; tmps =
(readDemPosition,5); readDemPosition += 5; return
((tmps)); } 通过读取文件中的数据,我们可以很容易的得到地图的
四边、地图中心点坐标和最大与最小高层差,以便在绘制地形时确定屏幕的显示位置和鼠
标控制的缩放和移动比例。 利用 OpenGL 实现算法的可视化 Open GL 是 Open
Graphics Library 的缩写,它是 SGI 公司开发的一套高性能图形处理系统,是图形硬件的
软件接口,意为开放的图形库。通过 OpenGL 程序员可以创建交互式的 应用 程序,实现
具有逼真效果的三维图形图像。由于其开放性和高度的可重用性, 目前 已成为业界标准
。 OpenGL 被设计成独立于硬件,独立于窗口系统的,在运行各种操作系统的各种计算机
上都可用,并能在 网络 环境下以客户/服务器模式工作,是专业图形处理、 科学 计算等
高端应用领域的标准图形库。