欢迎来到天天文库
浏览记录
ID:40015879
大小:1.07 MB
页数:40页
时间:2019-07-17
《专题5地形绘制基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Copyright2008ByNeusoftGroup.Allrightsreserved专题5绘制地形抛砖引玉我们通常将游戏场面架设在起伏的山坡、绿草、沙滩、雪地、树木、阳光和雾等烘托出的自然环境中,这样的场景可增加游戏的逼真度和吸引力。大家玩过的游戏中是否有非常逼真的场景给你留下了深刻的印象的?Copyright2008ByNeusoftGroup.Allrightsreserved麻雀虽小,五脏俱全地形网格就是一系列三角形栅格(grid),但是方格中的每个顶点都被赋予了一个高度值(高度或海拔),这样该方格就可通过方格对应高度的平滑过渡来模拟自然地
2、形中山脉到山谷的变化。然后,通过纹理来表现沙滩、绿草如茵丘陵和雪山等。Copyright2008ByNeusoftGroup.Allrightsreserved三角形栅格高度平滑过渡的三角形栅格具有光照和纹理的地形截图按部就班我们这个专题的主要内容有:地形高度图的创建和修改创建地形的几何信息对地形进行纹理映射和光照处理实现摄象机在地形中行走的效果Copyright2008ByNeusoftGroup.Allrightsreserved地形高度图从几何形态来看,不同的地形外貌,取决于地形表面的每一个点距离地平面的高度值。这些高度值可用二维数组来存储,数组
3、中的每一个元素就与地平面上每一个顶点的高度值一一对应。Copyright2008ByNeusoftGroup.Allrightsreserved地平面顶点地形网格顶点高度值我们使用高度图(heightmap)来描述地形中的丘陵和山谷。通常高度图以灰度图(grayscalemap)的形式保存起来。灰度图中的亮度越大,表示地形中某一点的海拔越高。Copyright2008ByNeusoftGroup.Allrightsreserved创建高度图生成一个地形高度数据的最直接的方法是,利用图形编辑软件(如photoshop),绘制一个与地平面相同尺寸的灰度图形
4、,用作地形高度图。图形绘制完毕后,将其保存为8位的RAW(原始二进制文件)文件,RAW文件连续存储了图像中以字节为单位的每个像素的灰度值。高度图被保存在磁盘中,通常为其每个元素只分配一个字节的存储空间,这样高度只能在区间[0,255]内。若0~255的高度值不足以表达我们要表达的地形,可以将高度图数据加载到程序中时,对其进行一个比例变换,重新分配一个整型或浮点型数组来存储这些高度值。Copyright2008ByNeusoftGroup.Allrightsreserved我们在地形类(Terrain)中定义一个成员函数(readRawFile)用于读取
5、高度图中的高度信息到一个向量里面:代码中的变量_heightmap是Terrain类的一个成员变量。Copyright2008ByNeusoftGroup.Allrightsreservedstd::vector_heightmap;boolTerrain::readRawFile(std::stringfileName){//Aheightforeachvertexstd::vectorin(numVertices);std::ifstreaminFile(fileName.c_str(),std::ios_base::bina
6、ry);if(inFile==0)returnfalse;inFile.read((char*)&in[0],//bufferin.size());//numberofbytestoreadintobufferinFile.close();//copyBYTEvectortointvector_heightmap.resize(_numVertices);for(inti=0;i7、的变量numVertsPerRow是Terrain类的一个成员变量。这两个方法允许我们通过行和列索引引用高度图中指定的项。Copyright2008ByNeusoftGroup.AllrightsreservedintTerrain::getHeightmapEntry(introw,intcol){return_heightmap[row*_numVertsPerRow+col];}voidTerrain::setHeightmapEntry(introw,intcol,intvalue){_heightmap[row*_numVertsPerRow8、+col]=value;}创建地形几何信息Copyright2008ByNeusoftGrou
7、的变量numVertsPerRow是Terrain类的一个成员变量。这两个方法允许我们通过行和列索引引用高度图中指定的项。Copyright2008ByNeusoftGroup.AllrightsreservedintTerrain::getHeightmapEntry(introw,intcol){return_heightmap[row*_numVertsPerRow+col];}voidTerrain::setHeightmapEntry(introw,intcol,intvalue){_heightmap[row*_numVertsPerRow
8、+col]=value;}创建地形几何信息Copyright2008ByNeusoftGrou
此文档下载收益归作者所有