猫史档案馆


【地形代码】噪声

用户:星星上的雪花星星上的雪花查看:0 回复:2 评论:0 创建时间:2021-09-24T20:28:58


天灵灵,地灵灵,技术喵喵快显灵(排版一定要修复哇) /** *@seed-噪声不填则使用默认噪声 */ seed=(voidundefined); (async()=>{ /*噪声生成器[原作者isunLt链接bbs.csdn.net/topics/392170273]*/ console.clear(); createPlane(); for(letboxofscene){ voxels.setVoxel(box.x*3,(box.y+12)/1.5,box.z*3,"grass"); }; })(); functionNoise(x,y){ if((typeofseed)!="undefined")returnseed; varn=(x+y*59); n=((n>>13)^n); varnn=((n*(n*n*15731+789211)+700000001)&0x7fffffff); varNoisies=(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); world.say("噪声:"+ Cosine_Interpolate(i1,i2,fractional_Y) ); 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)); }; }; }; 给地形加点灵魂: /*可以根据自己的需要增添*/ (async()=>{ for(x=0;x<128;x++){ awaitsleep(1); for(y=9;y<46;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); voxels.setVoxelId(x-1,y-1,z,voxel); voxels.setVoxelId(x+1,y-1,z,voxel); voxels.setVoxelId(x,y-1,z-1,voxel); voxels.setVoxelId(x,y-1,z+1,voxel); }; }}}; /*除喵*/ for(x=0;x<128;x++){ for(y=0;y<46;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'); }; }; }; }; }; })(); @YDS尹子


回复

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

我   C   T   M   D

(Chuan传 Tong统 Mei美 De德)

点赞0


评论


水翎稞水翎稞

排版好评(doge)

点赞0


评论