Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|Comet程序开发
您现在的位置: 天极网 > 开发频道 > 利用OpenGL实现内插算法可视化
全文

利用OpenGL实现内插算法可视化

2006-09-23 06:00 作者: 宋晓江 殷宏 杨勇 出处: 计算机与信息技术 责任编辑:>方舟
  摘 要 OpenGL是一种交互式计算机图形系统,具有绘制三维图形的功能,能高效地编写出可操纵图形硬件的程序,支持三维可视化的实现。本文以OpenGL为基础,对可视化技术进行研究,重点讨论了内插算法,结合OpenGL中视点的定义,通过OpenGL的函数来实现。

  关键词 OpenGL 可视化 内插算法

  引言

  为了便于对算法实现进行测试和效果分析,我们依据图1进行离散点采样。在图1中,地形面积为 ,其等高线分布如图所示,A点和B点为两座山的顶峰,其中A点高程值为3.6,B点高程值为2.3。我们将采样得到的离散点按照一定的规则存放在*.dem的文件中,通过读取文件中的数据来获取离散点的高程值。我们通过采样10或20个点生成 的DEM格网模型。

  
  图1 测试地形等高线图

  内插算法的可视化的实现

  1、读取文件中离散点数据

  离散点数据包括平面位置和高程两种信息,可以直接在野外通过全站仪或者GPS、激光测距仪等进行测量,也可以间接地从航空影像或者遥感图象以及既有地形图上得到。具体采用何种数据源和相应的测量技术,一方面取决于这些源数据的可获得性,另一方面也取决于DEM的分辨率、精度要求、数据量大小和技术要求等。

  对于离散点的数据,往往是很大的,我们只有按照一定数据结构存储在*.dem文件中,才能便于管理和修改。在程序中通过读取文件,可以得到任意一个文件中的地形信息。为了测试的需要,依据图1中的等高线我们可以采集到一些特征点的三维信息。例如,我们采集10个点的信息,将其存入文件中,其结构如下所示:

  10 0.0 0.0 0.0 10.0 10.0 10.0 10.0 0.0 0.0 3.6 3.0 7.1 3.6 7.1 3.0 2.3 5.5 5.5 1.4 5.7 8.0 1.0 8.0 8.0 0.5 9.0 2.0 1.3 6.0 1.2 1.0 5.0 4.0 1.0 1.0 7.2 2.0 2.0 2.0 0.3

  在实例中每个数据按照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 = DemFileContent.Substring(readDemPosition,5);
 readDemPosition += 5;
 return ( Convert.ToInt32(tmps));
}

private double readDouble()
{
 string tmps;
 tmps = DemFileContent.Substring(readDemPosition,5);
 readDemPosition += 5;
 return (Convert.ToDouble(tmps));
}

  通过读取文件中的数据,我们可以很容易的得到地图的四边、地图中心点坐标和最大与最小高层差,以便在绘制地形时确定屏幕的显示位置和鼠标控制的缩放和移动比例。

共2页。 1 2 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml