基于OpenGL的三维地形的生成与简化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在预先进行的地形模型简化过程中 ,每简化一 次三角网 ,就会生成另外一级模型 ,如果把原始的网 格作为最低级 ,那么每一次简化就生成更高一级的 网格 ,同时 ,任何关于被删除的顶点和三角形的增减 信息 ,都通过点结构参数的修改保存下来. 这样 ,在 任何时候都可以按某种需要恢复网格原始状态. 图 4 —图 7 分别显示了网格的 4 个层次.
具体操作过程如下 : 1) 初始化地形的最大 、最 小高度以及地形的网格间距 ; 2) 打开一幅位图 ,计 算出位图的高度和宽度 ,以及地形的水平 、垂直网格 数 ,找出位图的最大灰度值与最小灰度值 ,在这一步 骤中 ,需要注意的是 ,如果位图图像的宽或高有冗余 (也就是位图的高度 、宽度不是给定的网格间距的整 数倍) ,则须剪裁掉冗余的部分 ,然后在重新计算实 际用到的位图图像的宽和高 ; 3) 建立位图的灰度值 与地形高程的线性映射关系 ; 4) 依据网格交点的灰 度值以及线性映射关系 ,求出对应于该点的地图的 高程值 ,并将其存储到两维数组中 ; 5) 计算出各个 顶点的法线 ,利用 OpenGL 的显示技术 ,绘制地形的 三角形面片. 该算法实现的流程图如图 2 所示. 1. 3 地形模型的显示
在地形的绘制中 ,主要根据所计算出来的不同 层次的网格点的数据来绘制 ,地形的绘制是采用三 角形来模拟的. 在由地形建模算法得到的原始数据 为规则格网数据 ,采用直接将格网进行分解组合得 到三角形的方法. 原格网为正方形格网 ,以一条对角 线简单地将格网分解便形成了一系列的三角形.
源代码如下 :
/ / 线框形式的三角形绘制函数 Void Clod : :triangle (int x1 , int z1 , int x2 , int z2 , int x3 , int z3)
Implementation and simplification of three2dimensional terrain based on Open GL
FAN Nai2mei , XIONG Kun
( College of Comp. and Com . Eng. , Zhengzhou Univ. of Light Ind. , Zhengzhou 450002 , China)
依据 上 述 算 法 , 在 Visual C + + 环 境 下 基 于 OpenGL 生成了一个三维网格地形 ,如图 3 所示.
在用上述算法构建了地形网格模型后 ,需对地 形表面进行细化. 可采用添加纹理的方法 ,用该地区 航拍照片 ,经计算机图像处理后 ,作为地貌纹理贴在 三维地形曲面上即可.
0 引言
三维地形模 拟 是虚 拟 环 境 仿 真 中 最 基 本 的 、最 重要的环节之一. 通常地形建模所需的数据量很大 , 三维真实感地形的生成对计算机的图形处理能力提 出了很高的要求. 这些工作原本只能在三维图形工 作站或大型计算机上完成 ,但其昂贵的价格使大量 用户望而止步. 因此基于普通 PC 机快速生成高度 真实感的三维地形成为计算机图形学领域中的一个 挑战性课题. 一般来说 ,地形建模有以下 3 种方法 : 1) 分形地形建模. 基于分形的全自动生成 (地形完全
第 21 卷 第 3 期 2006 年 8 月
郑州轻工业学院学报 (自然科学版)
JOURNAL OF ZHENGZHOU UNIVERSITY OF LIGHT INDUSTRY (Natural Science)
文章编号 :1004 - 1478 (2006) 03 - 0084 - 04
1 地形构建
111 地形模型的数据结构 创建地形景观首先需考虑地形模型的生成 ,建
立与实际地形吻合的地形模型是成功创建地形景观 的关键. 假设地形由规则矩形面片构成 ,它可以通过 网格来表达 ,如图 1 所示. 在数据结构上 ,使用二维 数组描述地形网格 ,每个数组元素描述网格上的一 个结点 ;数组下标表示结点在网格中所处的行/ 列位 置 ,可以通过该下标和网格间隔来计算出其对应的 三维点的 x , z 坐标 ; 数组元素的值就是该结点的高 度值 y . 对于图 1 所示的地形网格 , 用 Terrain [ N ] [ M ]来描述 ,其中 N 是地形网格的行数 , M 是地形 网格的列数 ,Terrain[ i ] [ j ]表示第 i 行 、第 j 列上的 高度 , i 在 0 到 N 之间 , j 在 0 到 M 之间. 己知矩形 面片 4 个顶点的三维坐标 ,就可以方便地获得该矩 形面片上任一点的三维坐标 ,从而获得整个地形上 任一点的三维信息. 由此可见 ,通过二维网格描述地 形 ,能节省存储空间 ,有利于获得地形的三维信息.
Vol. 21 No. 3 Aug. 2006
基于 OpenGL 的三维地形的生成与简化
范乃梅 , 熊 坤
(郑州轻工业学院 计算机与通信工程学院 , 河南 郑州 450002)
摘要 :在 Visual C + + 环境下 ,以通用标准三维图形函数库 OpenGL 为工具 ,通过在位图的灰度值与 地形高程之间建立映射关系 ,快速生成了三维网格地形. 为减少高程数据生成地形的巨大数据量 , 应用 LOD 技术对生成的网格地形进行简化. 关键词 :三维地形 ;三维图形 ;地形建模 ;地形模型 ;OpenGL ;灰度等级 ;三维地形模拟 中图分类号 :TP311. 1 文献标识码 :A
三维地形的建模就是将 DEM 数据进行网格化 处理 ,每一个网格用三角形面片绘制出来 ,就可构成 高低起伏的曲面地形. 基于真实数据生成地形的方 法可通过飞机/ 卫星激光扫描直接测绘出 DEM ,但 获取费用较高 ,精度不一定满足要求 ,对普通用户来 说一般存在难以获取数据的问题. 针对这个问题 ,本 文提出了一种恢复 DEM 的算法 ,该算法是基于位图 来生成数字高度图 ,所采用的位图是利用遥感 、航测 图片 ,通过影像匹配方法产生的正射影像图. 该算法 通过正射影像图来自动创建从视觉上与实际地形吻 合的地形模型 ,进而给地形赋予纹理 ,最终生成效果 逼真的地形景观.
Abstract :An approach to rapidly build a three2dimentional terrain based on bitmap was presented. The method is to create a correspondence between the gray value of bitmap and the height of terrain. It is realized by pro2 gramming with Visual C + + and OpenGL. In order to reduce the giant datum of three2dimensional terrain , LOD (level of detail) technique was used to simplify the gridding terrain. Key words : three- dimensional terrain ; three- dimensional graph ; terrain modeling ; terrain model ; OpenGL ; gray level ; three- dimensional terrain simulating
收稿日期 :2005 - 12 - 07 作者简介 :范乃梅 (1976 —) ,女 ,河南省辉县人 ,郑州轻工业学院助教 ,主要研究方向 :计算机图形图像.
第3期
范乃梅等 :基于 OpenGL 的三维地形的生成与简化
·85 ·
示 ,广义的 DEM 可包括等高线 、三角网等 ,这里特指 由地表网格单元各点高程值构成的矩阵[1] .
在复杂模型的动态显示中 ,当观察点距某一物 体很近时 , 该物体的图像在屏幕上占据较多的像素
·86 ·
郑州轻工业学院学报 (自然科学版)
2006 年
图 2 生成网Biblioteka Baidu地形
图 3 三维网格地形
点. 当观察点距某一物体很远时 ,该物体的图像只能 在屏幕上占据很少的像素点 ,在这种情况下 ,用大量 的多边形面片去精确表示该物体是不必要的. 为了 更好地实现三维复杂模型的实时动态显示 ,将三维 物体用多种不同的精度表示 ,并根据观察点位置的 变化而选择不同精度的模型予以成像 ,就成为非常 有效 的 手 段. 这 种 方 法 通 常 称 为 细 节 层 次 LOD 技术. 2. 2 简化算法
第3期
范乃梅等 :基于 OpenGL 的三维地形的生成与简化
·87 ·
{
glBegin ( GL LINE LOOP) ; setVertex( x1 , z1) ; setVertex( x2 , z2) ; setVertex( x3 , z3) ; glEnd () ;
}
在地形的绘制中采用了多阶曲线插值的方法 , 这样绘制出的地形就比较平滑 ,最后采用三角形近 似和纹理贴图 , 这样绘制出的地形就比较平滑和 逼真. 2. 4 地形的动态显示
图 1 ( N ×M) 网格表示地形 1. 2 算法的基本原理
基于位图生成地形的关键在于如何合理地将位
图的值转换为可利用的高程数据. 最简单的方法是 建立位图的灰度等级[2] 与地形高程的线性映射关 系. 对于一幅位图 ,首先把它从水平 、垂直方向划分 为间距相等的网格 ;其次把网格交点像素的 RGB 值 转化为相应的灰度值 ,找到其最大的 、最小的灰度 值 ;然后根据实际地图资料可以获得该地形的最大 、 最小高度 ;从而可以建立位图像素的灰度值与地形 高程之间的映射关系. 有了映射关系 ,就可以计算出 网格点各个像素对应的地形高程 ,将其存入二维数 组. 这样就得到了三维地形的各个顶点数据 ,通过 OpenGL 绘制 ,即可得到三维地形.
可用顶点聚类 、近平面合并 、顶点删除 、边删除 、 三角形删除 、边折叠等[4 ,5] 基本简化动作来对地形 网格模型进行如下的处理 :
1) 数据预处理. 确定顶点的相邻多边形和计算 顶点的重要程度. 在读入原始地形模型数据的过程 中 ,对读入的顶点数据和三角形 ,用新建的数据结构 重新进行构建. 随后确定每一个顶点的相邻多边形 并计算他们的重要程度.
2) 选择顶点. 对于一个顶点 ,如果它满足以下 3 个条件 :自由度小于给定的值 ;重要度小于预先定义 的值 ;相邻点组中没有顶点被删除. 则该顶点可以被 删除.
3) 局部三角形化. 如果删除了一个顶点以及它 的相关三角形 ,那么必须对留下的星形多边形进行 三角化. 2. 3 LOD 地形的绘制
2 地形简化
一般情况下 ,构成地形的三角形和纹理数据量 非常大 ,每一个独立的三角形投影到图形空间后很 小 ,并且许多纹理像素可能被压缩到一个图像像素 中 ,以至于对图像的影响可以忽略不计. 为了保证在 漫游时地形的实时显示 ,有必要在绘制之前 ,对地形 模型进行简化 ,减少需要绘制的三角形数目 ,从而提 高绘制的速度. 本文应用 LOD (Level of Detail) 技术来 简化场景中的模型 ,提高场景的实时性显示. 2. 1 LOD 技术[3 ]
由分形算法生成) 或半自动生成 (给定一个初始模 型 ,其细节由分形算法生成) . 2) 基于数据拟合的地 形建模. 最简单且常用的一种地形建模方法 ,是由稀 疏分布点的高程值构成一些简单的三角形平面 ,形 成地形框架. 这种地形建模方法虽然显示速度很快 , 但过于简略 ,只具备较强的卡通效果 ,地形的真实感 会受到很大影响. 3) 基于真实地形数据的地形建 模. 基于真实地形数据建模构造场景的常用方法是 采用数字地面模型 DTM (Digital Terrain Model) 和数 字高程模型 DEM (Digital Elevation Model) 构成. DEM 中属性为高程的要素是数值的集合 ,通常用矩阵表
相关文档
最新文档