j2me 3D开发-基本地形渲染技术( 二 )


理解等高线,就可以说掌握了一半的技术 。在3D地形渲染中,采用数组的形式来保存高度信息(数组内容可以通过高度图读取,图片上的一个像素或者一个区域代表同一高度),根据高度信息在不同的位置绘制多边形,从而通过2D图像展示出3D地形场景 。
高度图可以使用画图板或者图像编辑器Adobe 产生 。使用图像编辑器可能更容易,它能够帮助创建想要的交互地形,另外也可以通过图形编辑特性,例如过滤,创建有趣的高度图 。
如图10-4所示是根据高度图“恢复”的3D山体地貌立体地图 。

j2me 3D开发-基本地形渲染技术

文章插图
10.1.2 海岛地图的原理
从上面对等高图的阐述,可以知道,地形是真实世界的一个模型,有平原、山脉、河流、悬崖和丘陵等 。以抽象角度来看,可以简单地认为地形仅仅是高度上的变化 。
例如,一个草原就是一个高度基本为常数的地形(除了可能有一些起伏和山丘外);一个山区或者鸿沟是高低落差比较大的地形;一条河流就是由一个高地势平原和穿过它的曲线组成,这个曲线比它周围的地形高度稍低 。
如图10-5所示,是一系列的高度地图,简单来看,它是一个像素的集合,每个像素都是在灰度上0~255之间变化,0是黑色,255是全白,读者也可以自己绘制高度地图 。可以判断,明暗反差越大,地势高低起伏也越大 。
说明:在灰度图像中,像素灰度级用8b表示,所以每个像素都是介于黑色和白色之间的256(28=256)种灰度中的一种 。灰度图像只有灰度颜色而没有彩色 。通常所说的黑白照片,其实包含了黑白之间的所有灰度色调 。从技术上来说,就是具有从黑到白的256种灰度色域(Gamut)的单色图像 。
10.1.3 地图元素图元
要将高度地图转换为场景,只需要读取图片的像素,然后根据像素的值设置平面的高度,最常用的平面是四边形 。因为四边形是规则的,可以采用数组方便地统一创建和管理(并且能实现地图的无缝) 。四边形由两个三角形组成,多个四边形组成了场景地图,如图10-6所示 。
10.1.4 读取元素数据
为了将高度地图转换为场景,创建一个类 。要创建等高地图,首先应当读取图片数据,方法可以将颜色存储到数组中 。
整型变量imgw和imgh用来保存图片文件的大小,表示1个像素所表示的四边形个数,例如这里设置为0.25,则表示一个四边形涵盖了4个像素的颜色信息 。
随着的增大,使用了更多的四边形来代表这个地形,地形的平滑度也在不断地提高,然而,也在增加内存的使用空间和CPU需要运算的多边形数量 。因此,每一个移动设备都需要依据可用内存、CPU运算能力等进行平衡 。
Java代码
on=0.25f;,imgh;[];[]data;;;="/.png";age(){=Image.();//加载文件imgw=img.();//图片宽度imgh=img.();//图片高度data=http://www.kingceram.com/post/[imgw*imgh];//根据文件大小创建数据img.(data,0,imgw,0,0,img.(),imgh);//将颜色信息保存到数组中=(int)(*imgw);//场景数组的宽度(列数)=(int)(*imgh);//地图数组的高度(行数)=[*];//创建地图数组=imgw/;//x方向上图片和场景地图的映射量=imgh/;//x方向上图片和场景地图的映射量for(inty=0;y