猫史档案馆


【box3】源码全公开!分形地形生成v1.0

用户:YDS尹子YDS尹子查看:37 回复:22 评论:37 创建时间:2021-01-26T08:37:21


和MC越来越近了!不过技术不成熟效果并非完美

废话不多说直接上图和代码

center_image

center_image

 

(如果觉得效果不好可以多运行几遍或者修改参数)

代码:(其实就是一个简单的递归)

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("地形生成完毕");
})();


回复

上一页1 页 / 共 1下一页
传闻中的五音璃音传闻中的五音璃音

喵喵喵喵喵

顶尹子

点赞0


评论


AbnormalLOGAbnormalLOG

沙发

点赞0


评论


一勺小汤_纪念号一勺小汤_纪念号

板凳

点赞0


评论


YDS尹子YDS尹子

center_image

点赞2


评论


小小瓢虫小小瓢虫

尹子NB!!emotion_编程猫_点赞

点赞0


评论


星霁榆茂星霁榆茂

沙发

点赞0


评论


YDS尹子YDS尹子

center_image

点赞1


评论


xwstsrhxwstsrh

可MC的海平面是62

点赞0


评论


Chara_juechuief_sChara_juechuief_s

加油!尹子喵!!!!!!!!!!!!emotion_编程猫_厉害了

点赞0


评论


传说之下鳝丝解说传说之下鳝丝解说

很难不支持

点赞0


评论


JSR代码喵JSR代码喵

dd

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

目前我制作的一维模型:

world.say("地形开始生成");
function rand(){
    return Math.random()*10;
}
let minl = 20;
let size = 128;
let noise = [1.5];
for (let i = 1;i < size;++i){
    noise.push((Math.random()*2+noise[i-1])/2);
}
for (let i = 0;i < size;++i){
    world.say(minl+Math.pow(7,noise.pop())+rand());
}
world.say("地形生成完毕");

点赞0


评论


编程猫编程猫

NB!emotion_编程猫_加油emotion_给力

点赞0


评论


该账号已停用该账号已停用

用地形生成器他不香吗?

点赞0


评论


指令者指令者

NB!emotion_编程猫_加油emotion_给力

点赞0


评论


难起的名字难起的名字

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNB

点赞0


评论


billy司马白鹿billy司马白鹿

这个必须支持

跟我一起喊:

点赞1


评论


芜湖咸鱼芜湖咸鱼

膜拜算法大佬

点赞2


评论


hecoshecos

console.log('azzz')

点赞0


评论


IaeaIaea

点赞0


评论


cool-creepercool-creeper

awa

点赞0


评论


百变喵啊百变喵啊


center_image

点赞0


评论