456
社区成员
发帖
与我相关
我的任务
分享
var persistence1 = 0.001;
var Number_of_Octaves1 = 2;
function Noise(x,y){
var n=x+y*59;
n = (n >> 13) ^ n;
var nn = (n * (n * n * 15731 + 789211) + 700000001) & 0x7fffffff;
return 1.0 - (nn / 1073741824.0);
}
function SmoothedNoise(x,y) //光滑噪声
{
var corners = ( Noise(x-1, y-1)+Noise(x+1, y-1)+Noise(x-1, y+1)+Noise(x+1, y+1) ) / 16;
var sides = ( Noise(x-1, y) +Noise(x+1, y) +Noise(x, y-1) +Noise(x, y+1) ) / 8;
var center = Noise(x, y) / 4;
return corners + sides + center;
}
/**
* @return {number}
*/
function Cosine_Interpolate(a,b,x) // 余弦插值
{
var ft = x * 3.1415927;
var f = (1 - Math.cos(ft)) * 0.5;
return a*(1-f) + b*f;
}
/**
* @return {number}
*/
function InterpolatedNoise(x,y) // 获取插值噪声
{
var integer_X = parseInt(x);
var fractional_X = x - integer_X;
var integer_Y = parseInt(y);
var fractional_Y = y - integer_Y;
var v1 = SmoothedNoise(integer_X, integer_Y);
var v2 = SmoothedNoise(integer_X + 1, integer_Y);
var v3 = SmoothedNoise(integer_X, integer_Y + 1);
var v4 = SmoothedNoise(integer_X + 1, integer_Y + 1);
var i1 = Cosine_Interpolate(v1, v2, fractional_X);
var i2 = Cosine_Interpolate(v3, v4, fractional_X);
return Cosine_Interpolate(i1, i2, fractional_Y);
}
/**
* @return {number}
*/
function PerlinNoise(x,y) // 最终调用:根据(x,y)获得其对应的PerlinNoise值
{
var total = 0;
var p = persistence1;
var n = Number_of_Octaves1;
for(var i=0; i<n; i++)
{
var frequency = Math.pow(2,i);
var amplitude = Math.pow(p,i);
total = total + InterpolatedNoise(x * frequency, y * frequency) * amplitude;
}
return total;
}
//用createPlane()函数在每个点上按照这个点上的值,在这个点上叠相应数量的土块//
function createPlane() {
var l = worldSize / blockSize;
l=100;
console.log(l);
var planeSize=new Array(l);
for(var i=-l/2;i<l/2;i++)
{
planeSize[i]=new Array(l);
for(var j=-l/2;j<l/2;j++)
{
planeSize[i][j]=PerlinNoise(i,j);
for(var z=-1;z<planeSize[i][j]*20-1;z++)
scene.add(boxBuf(i,z,j));
}
}
for(var i = -l/2; i != l/2; ++i)
for(var j = -l/2; j != l/2; ++j) {
scene.add(boxBuf(i, -1, j));
}
}