C/C++编程笔记:游戏开发中的噪声算法详解,游戏编程常用技术(11)

2.输入一个点坐标(二维的话就是二维坐标 , 三维就是三维坐标 , n维的就是n维坐标) , 我们找到和它相邻的那些晶格顶点(二维下有4个 , 三维下有8个 , n维下有2n个) , 计算该点到各个晶格顶点的距离向量 , 再分别与顶点上的梯度向量做点乘 , 得到2n个点乘结果 。

//点乘floatdot(Vector2 v1Vector2 v2){returnv1.x*v2.x+v1.y*v2.y;

3.使用缓和曲线来计算它们的权重和(同样的 , 可以是s(t)=3t2?2t3

, 也可以是s(t)=6t5?15t4+10t3

下图通过颜色差异显示了由2D柏林噪声生成的各像素点的值:

实现(二维)

另一个更快的实现方式 , 它与标准实现方式的区别是:晶体顶点是从若干个梯度向量里随机选择一个向量而不是产生一个随机向量 , 这样做可以预先计算好求梯度值时各项的系数 。 因此我们只需这样重写一下grad函数:

推荐阅读