计算机图形学课程设计--LOD地形渲染.docVIP

计算机图形学课程设计--LOD地形渲染.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学课程设计 ——LOD地形渲染 班级: 学号: 姓名: 指导老师: 课程设计目的 了解地形生成技术,掌握基于四叉树空间划分的LOD地形渲染,掌握天空的绘制方法,使用天空盒或者天空半球实现天空的绘制。 课程设计实现 地形渲染的研究 地形是计算机图形的一个重要的组成部分,地形具有覆盖面积大,数据要求精度高等特点。在绘制地形时我们往往使用多边形来模拟地形的表面细节,多边形通常又被划分为若干三角形,而地形数据通常是非常庞大的,因此需要绘制的多边形即三角形面片数量是非常庞大的。但是,在渲染地形的过程中由于地形非常庞大,所以对于离视点比较远的地形不需要用太多的三角形来模拟,而只需要在保证地形整体轮廓不变的情况用较少的三角形来模拟就可以了。因此,我们可以使用LOD技术来对地形进行简化。这里我们使用一种基于四叉树空间划分的算法来实现LOD地形。 设计数据结构 基于四叉树空间划分的地形渲染通常使用大小为2^n+1的高程数据作为数据源。所谓高程数据即彩色范围在0-255的灰度图片。图片上没一点的灰度颜色值代表了该点处地形顶点的高度值。由于灰度图片的颜色值被限制在0-255之间,所以我们可以设置一个常数因子heightScale来缩放灰度数据到一个合理的高度范围之内。我们还需要一个常量来设定地形顶点之间的水平距离。所以我们抽象出地形类的基本数据成员如下: Class Terrain { Private: BYTE* pHeightMapData; // 高程数据 Float heightScale; // 高度缩放值 Float cellWIdth; // 顶点水平距离 } 同时对于地形类来说我们要完成地形数据的初始化,地形的渲染这两个基本操作,因此还需要提供两个基本的公共接口来给外界使用。地形类结构如下: Class Terrain { Private: BYTE* pHeightMapData; // 高程数据 Float heightScale; // 高度缩放值 Float cellWIdth; // 顶点水平距离 Public: Void InitTerrain(); // 初始化地形数据 Void RenderTerrain(); // 渲染地形 } 有了地形类的数据结构,我们还需要一个四叉树来组织地形节点。首先介绍一下地形节点的概念,一个地形节点即一个四方形的地形,从地形的中心水平和垂直各画一条线,将这个四方形划分成四个等大的四方形,那么划分前的四方形就是一个地形节点,划分后的四个子四方形就是该地形节点的子节点,再对子节点经行划分直到不能继续划分就形成了一颗四叉树。对于四叉树节点的数据结构设计如下: struct TerrainNode { int centerRow; // 节点中心点的行索引 int centerCol; // 节点中心点的列索引 int halfRange; // 节点覆盖范围的一半 float deltaH; // 节点简化后的误差值 float radius; // 节点的包围球半径 float heightMin;// 节点的最小高度值(用于计算包围球或者包围盒) float heightMax;// 节点的最大高度值(用于计算包围球或者包围盒) tagTerrainNode* leftUpNode; // 节点的左上节点 tagTerrainNode* rightUpNode; // 节点的右上节点 tagTerrainNode* rightDownNode; // 节点的右下节点 tagTerrainNode* leftDownNode; // 节点的左下节点 } 地形数据的简化 在未进行简化的情况下,我们将一个地形节点使用8个三角形扇片来渲染,这时三角形面片的数量是非常巨大的,所以我们要对地形节点简化。所需渲染的三角形进行简化,我们可以考虑这个地形块每条边中间的顶点(下图左侧红色点): 如果这些红色顶点去除,我们就得到如上图右侧所示简化后的节点。注意误差就在这一步产生,由于红色点删除导致了原来边上由两条线段变为一条,而红点处顶点的高度值和简化后该边的中点值是不一定相等的,因此就会产生误差。 我们把红点处的高度值与该边中点的高度值的差值的绝对值,作为该边的简化之后的误差值,依次求出该节点四个边的误差值,并且选取最大的误差值作为该节点的误差值。如果该节点还有子节点,则选取其四个子节点和四个边中的最大误差值作为该节点误差。 在绘制过程中,我们根据节点的误差是否大于某个值,来判断节点是否可以被简化,若不可以被简化,则继续细分该节点。绘制过

文档评论(0)

ze122230743 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档