地形编辑的基本要求实际上只有三个:
1) 地形网格的生成
2) 画刷所在区域的定位
3) 网格顶点高度值的修改
只要知道如何绘制矩形,第一点应该很容易做到。
如何计算受画刷影响的网格顶点是第二点需要解决的问题,介绍一下我所使用的方法:先求从鼠标所在的屏幕空间点投射到三维空间的射线与网格平面(习惯上是XOZ面)的交点(x , y , z),将x和z取整作为受影响区域圆心(考虑画刷为圆形),然后根据画刷半径选取出一个正方形区块,最后在该区块中遍历每个网格顶点找出距离小于半径的,修改其高度。
对于高度修改的算法,需根据想要拉出的地形效果配置不同的算法,比如:y += (radius – dist) * a(其中radius为画刷半径,dist为顶点到圆心的距离,a为调节系数),就可以拉出看上去还不错的土包:)
在实现了以上三点基本需求后,高度图的生成、按照高度图生成地形、加载/保存等等一系列需求都比较容易搞定了。