利用OpenGL实现内插算法可视化_第1页
利用OpenGL实现内插算法可视化_第2页
利用OpenGL实现内插算法可视化_第3页
利用OpenGL实现内插算法可视化_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、利用OpenGL实现内插算法可视化          摘  要   OpenGL是一种交互式计算机图形系统,具有绘制三维图形的功能,能高效地编写出可操纵图形硬件的程序,支持三维可视化的实现。本文以OpenGL为基础,对可视化技术进行研究,重点讨论了内插算法,结合OpenGL中视点的定义,通过OpenGL的函数来实现。    关键词  OpenGL  可视化  内插算法1  引言   为了便于对算法

2、实现进行测试和效果分析,我们依据图1进行离散点采样。在图1中,地形面积为 ,其等高线分布如图所示,A点和B点为两座山的顶峰,其中A点高程值为3.6,B点高程值为2.3。我们将采样得到的离散点按照一定的规则存放在*.dem的文件中,通过读取文件中的数据来获取离散点的高程值。我们通过采样10或20个点生成 的DEM格网模型。图1 测试地形等高线图2  内插算法的可视化的实现2.1  读取文件中离散点数据   离散点数据包括平面位置和高程两种信息,可以直接在野外通过全站仪或者GPS、激光测距仪等进行测量,也可以间接地从航空影像或者遥感图象以及既有地形图上得到。

3、具体采用何种数据源和相应的测量技术,一方面取决于这些源数据的可获得性,另一方面也取决于DEM的分辨率、精度要求、数据量大小和技术要求等。   对于离散点的数据,往往是很大的,我们只有按照一定数据结构存储在*.dem文件中,才能便于管理和修改。在程序中通过读取文件,可以得到任意一个文件中的地形信息。为了测试的需要,依据图1中的等高线我们可以采集到一些特征点的三维信息。例如,我们采集10个点的信息,将其存入文件中,其结构如下所示:10   0.0  0.0  0.0  10.0 10.0 10.0 10.0 0.0 

4、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 

5、2.0  0.3     在实例中每个数据按照5个字符来存储。第一个数据为采样离散点的总数,第二到第九个数据分别为所选地形左下、左上、右上、右下点的平面X和Y的坐标,第十和第十一个数据为地形的最小高程值和最大高程值,余下的数据每三个为采样离散点的三维坐标X、Y和Z,共有十个。   在LoadFileData类中,需要先定义public int DataNum; /离散点的总数public double, DataPoint=new double 50,3; /离散数据点的三维坐标int readDemPosition;  /

6、 读取位置string DemFileContent;  /DEM文件内容public struct Pointpublic double x;   public double y;public struct DEMStructpublic Point  LeftBottom;public Point  LeftTop;      public Point  RightTop;      public Point  RightBottom;

7、60;     public double MinElevation;      public double MaxElevation;   public DEMStruct DemDataStruct;/存储*.dem文件中前十一个数据   同时在主程序中,还需要调用如下两个读取int型和double型的函数:private int readInt()       string tmps ;    tmp

8、s = DemFileContent.Substring(readDemPosition,5);    readDemPosition += 5;    return ( Convert.ToInt32(tmps);      private double readDouble()       string tmps;    tmps = DemFileContent.Substring(readDemPositio

9、n,5);    readDemPosition += 5;    return (Convert.ToDouble(tmps);      通过读取文件中的数据,我们可以很容易的得到地图的四边、地图中心点坐标和最大与最小高层差,以便在绘制地形时确定屏幕的显示位置和鼠标控制的缩放和移动比例。2.2  利用OpenGL实现算法的可视化   Open GL是Open Graphics Library 的缩写,它是SGI公司开发的一套高性能图形处理系统,是图形硬件的软件接

10、口,意为开放的图形库。通过OpenGL程序员可以创建交互式的应用程序,实现具有逼真效果的三维图形图像。由于其开放性和高度的可重用性,目前已成为业界标准。 OpenGL被设计成独立于硬件,独立于窗口系统的,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。            为了便于我们后期的LOD地形简化,我们一般要将地形绘制成三角格网的形式。在绘制三角形时,由于地形不可能都是规则的长方形或正方形,考虑到一般地

11、形的多样性和复杂性,不能够将点简单的连线。根据三角形的四种形式,每个构成三角形的点都先按照四边形的方式进行划分成四个点(如图2)。图2 三角形四种情况下点的的划分4   在图中,三角形中必有一个点被两个编号所代表,然后按照1-2-4-1-3-4的顺序进行连接,必然能绘制出四种情况中的任何一种三角形。通过上述操作,可以实现程序能运用到所有地形的显示。   程序代码private void DrawTriangle(Point3D Point1, Point3D Point2, Point3D Point3, Point3D Point4 ) &#

12、160;     GL.glBegin(GL.GL_TRIANGLES);/开始绘三角形   GL.glVertex3d(Point1.x, Point1.y, Point1.z);/从1起笔   GL.glVertex3d(Point2.x, Point2.y, Point2.z);/画到2   GL.glVertex3d(Point4.x, Point4.y, Point4.z); /画到4   GL.glVertex3d(Point1.x, Point1.y, Point1.z)

13、; /画到1   GL.glVertex3d(Point3.x, Point3.y, Point3.z); /画到3   GL.glVertex3d(Point4.x, Point4.y, Point4.z); /画到4   GL.glEnd();/完成一个三角形的绘制   通过上述操作,可以将图2的点视图转化为三角形格网试图(如图3)。(a)加权平均内插数学模型(b)多面函数内插数学模型(c)最小二乘内插数学模型图3 利用搜索圆实现地形的三角形格网视图3  结论   在现实中,我们需要生成的地形往往是很庞大,很复杂的,因此不能够仅利用某一种算法和某一种搜索方式生成全部的地形。对于大范围的复杂地形,就必须先对地形按起伏程度进行区域分块,对不同的区域选择合适的算法和搜索方式。参考文献1 Donald Hearn ,M.Pauline Baker .Computer Graphics M.电子工业出版社,1998Edwward Angel. 

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论