用户:
YDS尹子查看:9 回复:11 评论:9 创建时间:2021-11-13T16:29:14
在地形编辑器(www.yxtnt.cn/boxTE/terrainEditor.html)选择打开项目,打开评论区置顶的灰度图!请把水平面设置到12
不会取名字的屑_function cor3D(x,y,z){this.x=x;this.y=y;this.z=z;}
var grid=256;/*地图大小,最好是2的倍数 */
var watl=20;/*水面高度 */
var h=0.9,d=Math.round(Math.log2(grid))+1;/*h:粗糙系数,建议0~1,1最平滑 d不用去管它,调大了会崩坏你的电脑 */
var ran=120;/*随机取值范围大小,此处为±70 */
var seed=[];
function classification(pul,pur,pdl,pdr,depth,range){
range*=Math.pow(2,-h);
if(depth==0){
seed.push(pul);
}else{
var pm=new cor3D((pur.x+pdl.x)/2,(pur.y+pdl.y)/2,(pur.z+pdl.z)/2);
var pmu=new cor3D((pur.x+pul.x)/2,(pur.y+pul.y)/2,(pur.z+pul.z)/2);
var pmd=new cor3D((pdr.x+pdl.x)/2,(pdr.y+pdl.y)/2,(pdr.z+pdl.z)/2);
var pml=new cor3D((pul.x+pdl.x)/2,(pul.y+pdl.y)/2,(pul.z+pdl.z)/2);
var pmr=new cor3D((pdr.x+pur.x)/2,(pdr.y+pur.y)/2,(pdr.z+pur.z)/2);
pm.y+=Math.random()*2*range-range*0.9;
if(depth==d)pm.y=pur.y;
classification(pml,pm,pdl,pmd,depth-1,range);
classification(pm,pmr,pmd,pdr,depth-1,range);
classification(pul,pmu,pml,pm,depth-1,range);
classification(pmu,pur,pm,pmr,depth-1,range);
}
return;
};
(async function(){
classification(new cor3D(0,22,grid*2),new cor3D(grid*2,22,grid*2),new cor3D(0,22,0),new cor3D(grid*2,22,0),d,ran);
for(let i=0;i<seed.length/4;i++){
var y=Math.round(seed[i].y);
if(y>watl){
voxels.setVoxel(seed[i].x,y,seed[i].z,"grass");
}else if(y==watl){
voxels.setVoxel(seed[i].x,y,seed[i].z,"sand");
}else if(y<watl){
voxels.setVoxel(seed[i].x,y,seed[i].z,"dirt");
}else{
console.log("azzz")
}
for(let j=0;j<y;j++){
voxels.setVoxel(seed[i].x,j,seed[i].z,"dirt");
}
if(Math.random()<0.02)await sleep(10);
}
for(let i=0;i<grid;i++){
for(let j=0;j<grid;j++){
for(let k=0;k<=watl;k++){
if(voxels.getVoxel(i,k,j)==0)voxels.setVoxel(i,k,j,"water");
}
}
}
console.log("地形生成完毕");
})();点赞0
评论