猫史档案馆


【代码】用噪声生成地形

用户:星星上的雪花星星上的雪花查看:6 回复:3 评论:6 创建时间:2021-09-20T22:38:29


/** *@seed-种子不填则使用默认种子(噪声?) *@velocity-地形生长速度越大越快 *@high-地形的高度不要填太高推荐1.5 */ seed=(undefined); velocity=(0.1); high=(1.5); (async()=>{ /*噪声生成器[原作者isunLt链接bbs.csdn.net/topics/392170273]*/ console.clear(); for(world.random=0;world.random<high;true){ world.random+=velocity; createPlane(); for(letl=0;l<scene.length;l++){ voxels.setVoxel(scene[l].x*3,(scene[l].y+12)/1.2,scene[l].z*2,'grass'); }; awaitsleep(500); }; for(i=0;i<1;i++) for(x=0;x<128;x++){ for(y=9;y<30;y++){ for(z=0;z<128;z++){ if(voxels.getVoxelId(x,y,z)!=0){ letvoxel=voxels.getVoxelId(x,y,z) voxels.setVoxelId(x-1,y+1,z-1,voxel); }; }}}; for(x=0;x<128;x++){ for(y=9;y<30;y++){ for(z=0;z<128;z++){ if(voxels.getVoxelId(x,y,z)!=0){ letvoxel=voxels.getVoxelId(x,y,z) voxels.setVoxelId(x+1,y-2,z-1,voxel); }; }}}; for(x=0;x<128;x++){ for(y=9;y<30;y++){ for(z=0;z<128;z++){ if(voxels.getVoxelId(x,y,z)!=0){ letvoxel=voxels.getVoxelId(x,y,z); /*voxels.setVoxelId(x-1,y-2,z-1,voxel);*/ voxels.setVoxelId(x-1,y-1,z+1,voxel); }; }}}; await(async()=>{for(i=128;i-=1;i>0){for(x=0;x<128;x++){for(y=0;y<128;y++){for(z=0;z<128;z++){if(voxels.getVoxel(x,y,z)==0){remeber=voxels.getVoxel(x,(y+1),z);voxels.setVoxelId(x,y,z,remeber);voxels.setVoxelId(x,(y+1),z,0)}}}}awaitsleep(喵)}})(); /*除喵*/ for(x=0;x<128;x++){ for(y=0;y<128;y++){ for(z=0;z<128;z++){ if(voxels.name(voxels.getVoxel(x,y-1,z))=='grass'){ if(voxels.getVoxel(x,y,z)!=0){ voxels.setVoxel(x,y-1,z,'dirt'); }; }; }; }; }; })(); functionNoise(x,y){ if((typeofseed)!="undefined")returnseed; varn=(x+y*59); n=((n>>13)^n); varnn=((n*(n*n*15731+789211)+700000001)&0x7fffffff); varNoisies=(world.random-(nn/1073741824.0));/*最终要的种子(×)噪声(√)*/ returnNoisies; }; functionSmoothedNoise(x,y){/*光滑噪声*/ varcorners=(Noise(x-1,y-1)+Noise(x+1,y-1)+Noise(x-1,y+1)+Noise(x+1,y+1))/16; varsides=(Noise(x-1,y)+Noise(x+1,y)+Noise(x,y-1)+Noise(x,y+1))/8; varcenter=Noise(x,y)/4; return(corners+sides+center); }; functionCosine_Interpolate(a,b,x){/*余弦插值*/ varft=x*Math.PI; varf=(1-Math.cos(ft))*0.5; returna*(1-f)+b*f; }; functionInterpolatedNoise(x,y){/*获取插值噪声*/ varinteger_X=parseInt(x); varfractional_X=x-integer_X; varinteger_Y=parseInt(y); varfractional_Y=y-integer_Y; varv1=SmoothedNoise(integer_X,integer_Y); varv2=SmoothedNoise(integer_X+1,integer_Y); varv3=SmoothedNoise(integer_X,integer_Y+1); varv4=SmoothedNoise(integer_X+1,integer_Y+1); vari1=Cosine_Interpolate(v1,v2,fractional_X); vari2=Cosine_Interpolate(v3,v4,fractional_X); returnCosine_Interpolate(i1,i2,fractional_Y); }; functionPerlinNoise(x,y){/*最终调用:根据(x,y)获得其对应的PerlinNoise值*/ vartotal=0; varp=Math.random(); varn=Math.floor(Math.random()*10); for(vari=0;i<n;i++){ varfrequency=Math.pow(2,i); varamplitude=Math.pow(p,i); total=(total+InterpolatedNoise(x*frequency,y*frequency)*amplitude); }; returntotal; }; /*用createPlane()函数在每个点上按照这个点上的值,在这个点上叠相应数量的土块*/ functioncreatePlane(){ worldSize=128; blockSize=1; l=(worldSize/blockSize); scene=[]; varplaneSize=newArray(l); for(vari=-l/2;i<l/2;i++){ planeSize[i]=newArray(l); for(varj=-l/2;j<l/2;j++){ planeSize[i][j]=SmoothedNoise(i,j); for(varz=-1;z<planeSize[i][j]*20-1;z++){ scene.push(newBox3Vector3(i,z,j)); }; }; }; for(vari=-l/2;i!=l/2;++i){ for(varj=-l/2;j!=l/2;++j){ scene.push(newBox3Vector3(i,1,j)); }; }; }; 噪声从CSDN上转载,YDS尹子帮了一些代码


回复

上一页1 页 / 共 1下一页
星星上的雪花星星上的雪花

这排版我服了

点赞0


评论


星星上的雪花星星上的雪花

我顶!

点赞0


评论


小苏打_小苏打_

柏林噪声?还是值噪声?

可以描述详细一点,毕竟噪声算法有很多种

 

比如值噪声和直接画函数图区别不大,

而柏林噪声设计向量的一些运算,

技术含量差别太大了

emotion_doge

点赞0


评论