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

本章将讲述3D中常用的一些技术:包括高度地图、粒子系统和碰撞检测技术 。
是地形的输入数据,可以理解为位图,一个2D矩阵,和位图不同的是,把元素的颜色值映射为高度值,建立的方法有很多,这里使用灰度图来创建高度地图 。
粒子系统在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势 。每一种粒子系统都有一些相似的参数,但也都存在差异,如何优化它们的性能并运用于3D创作领域就看开发者的想象力了 。
碰撞检测没有很标准的理论,但都建立在2D的基础上,这里沿用了AABB或者OBB的检测方法,或者先用球体做粗略的检测,然后用AABB和OBB作精细的检测 。BSP技术并不广泛适用,但是能提高效率,本章没有太多的涉及 。
本章主要包括以下几个方面的内容 。
n 理解怎样通过灰度图产生顶点和三角面组成立体地图 。
n 在高低不平的地形中使用摄影机来模拟行走或跑 。
n 使用粒子系统构造火焰、爆炸等常用特效 。
n 使用球体、AABB和OBB技术进行碰撞检测 。
10.1 基本地形渲染技术
什么是呢?所谓高度图实际上就是一个2D数组 。创建地形为什么需要高度图呢?可以这样考虑,地形实际上就是一系列高度不同的网格而已,这样数组中每个元素的索引值刚好可以用来定位不同的网格(x,y),而所储存的值就是网格的高度(z) 。
10.1.1 简介
现实中的地形是真实的,不是由三角平面模拟的,但是3D图形图像处理中常常使用三角形来代替地形的表面,每个三角形的顶点高度在山脉到山谷之间转换,模拟自然地形,如图10-1所示 。在这个过程中,还将应用纹理展示沙滩、丘陵和雪山 。
技术的灵感来源于等高地图的绘制,如图10-2所示,是一幅等高地图,它通常用来描绘高低起伏比较大的地形 。

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

文章插图
例如,飞行员必须了解哪里有高海拔的障碍物、山川、湍流的方向等,以便安全地飞行 。从空中往下看,陆地上可能很平坦,但事实上等高线是展开的,没有相当的理解力和想象力,许多人并不能很好地领会地图实际提供的信息 。
高度从平面图上无法立体地显现,所以用有规律的间隔来表示海拔,通常根据测量方法的不同一般间隔为50英尺或10m,同等位置的点被连成线,即等高线 。
许多情况下这些等高线聚在图上形成封闭的环线,有些部分为不规则的心形,不时会凸出来一点 。如果它们突然中断与其他线相冲突,则表示有高度的突然变化,事实上为悬崖或很深的落瀑 。
自然界中能看到的惟一等高线只有沿着海岸的水平线(由于海潮的变化,事实上那也不是完全意义上的等高线),但可以把等高线想象成如同水平桌面的边线,如果把衣物或其他东西堆在桌面上,就如同小山峰或其他形状 。
【j2me 3D开发-基本地形渲染技术】在这些等高线之间具体地形如何,都没有表示出来 。等高线之间也不一定就是斜坡,可能是洞*、凸起的岩石,以及其他各种高度变化在10m之内的地势 。从等高线的相应位置,可以简单地猜测出地表大概会是如何变化的 。
等高线地图可以形象地反映山体的情况,如图10-3所示是实际山体与等高线地图的对应表示 。等高线地图在军事、旅游、探矿中有着广泛的应用 。
等高线之间的间隔只是表明同一理论高度下地平线上点之间的距离,并非是地面山坡上点间的实际距离,它们只是用来表明相应的位置,并非根据地平面的比例 。
常见的一种错误想法是,一群等高线是按地图绘制比例缩小的地面高度——要知道典型的旅行地图比例是1∶50000,10m在图上只有0.02mm 。图上间距5mm的等高线在地表面的距离为250m,而不是实际代表的10m落差,差距是1∶25 。