猫史档案馆


【BOX3教程】针对萌新:用代码制造地形!!!针对“创图”者:要代码师或建模师吗?

用户:血月孤狼血月孤狼查看:10 回复:8 评论:10 创建时间:2022-01-30T11:06:57


老手勿入!

老手勿入!

老手勿入!

重要的事情说三遍!

↓看↓

 

unction cylinder(vox, cx, cy, cz, radius, height){
    let xend = cx+radius
    let yend = cy+height
    let zend = cz+radius
    for(let x=cx-radius; x<=xend; x++){
        for(let z=cz-radius; z<=zend; z++){
            let dx = x-cx;
            let dz = z-cz;
            if(Math.round(Math.sqrt(dx*dx+dz*dz)) <= radius){
                for(let y=cy; y<yend; y++){
                    voxels.setVoxel(x,y,z,vox)
                }
            }
        }
    }
}

for(var i=0;i<300;i++){
        let x = Math.random() * 125
        let z = Math.random() * 125
        let r = 2 + Math.random() * 5
        let h = Math.random() * 4
        cylinder('dirt',x,9,z,r,h) 
}

for(var y=8;y<13;y++){
    for(var x=0;x<127;x++){
        for(var z=0;z<127;z++){
            if(voxels.getVoxel(x,y,z)!=0 && voxels.getVoxel(x,y+1,z)==0){
                voxels.setVoxel(x,y,z,'grass')//喵地“grass”
            }
                    
        }
    }
}

看到了吗?

这就是最简单的地形制造

emotion_编程猫_点赞

↓再看↓

function per_1dim(dots,interval){
    var i,y1,y2,dif,j;
    var pos=[];
    for(i=1;i<dots.length;i++){
        y1=dots[i];
        y2=dots[i-1];
        dif=Math.abs(y1-y2);
        if(y1<y2){
            for(j=0;j<=3.14;j+=3.14/interval){
                pos.push(y2+(Math.cos(j)-1)/2*dif);
            }
        }else{
            for(j=3.14;j>=0;j-=3.14/interval){
                pos.push(y2+(Math.cos(j)+1)/2*dif);
            }
        }
    }
    return pos;
}
async function per_2dim(interval,slope){
    var x,y,z;
    var dots=[],y1=[],y2=[],y3=[];
    for(x=0;x<=256;x+=interval){
        dots.push([]);
        for(z=0;z<=256;z+=interval){
            y=Math.round(Math.random()*slope);
            dots[x/interval].push(y);
        }
        await sleep(1);
    }
    for(x=0;x<=256;x+=interval){
        y1.push(per_1dim(dots[x/interval],interval));
        await sleep(1);
    }
    for(x=0;x<=256;x++){
        y2.push([]);
        for(z=0;z<=256;z+=interval){
            y2[x].push(y1[z/interval][x]);
        }
        await sleep(1);
    }
    for(x=0;x<=256;x++){
        y3.push(per_1dim(y2[x],interval));
    }
    return y3;
}
async function terrain(slope){
    var x,y,z;
    var per128=await per_2dim(128,slope);
    var per喵=await per_2dim(喵,slope);
    var per32=await per_2dim(32,slope);
    var per16=await per_2dim(16,slope);
    var per8=await per_2dim(8,slope);
    var l=[];
    for(x=0;x<=256;x++){
        l.push([]);
        for(z=0;z<=256;z++){
            l[x].push(Math.ceil((per128[x][z]+per喵[x][z]+per32[x][z]+per16[x][z]+per8[x][z])/5));
        }
    }
    for(x=0;x<=256;x++){
        for(z=0;z<=256;z++){
            for(y=0;y<l[x][z];y++){
                voxels.setVoxelId(x,y,z,125);
            }
            voxels.setVoxelId(x,l[x][z],z,127);
        }
        await sleep(100);
    }
}
terrain(62);

看见了吗?

这就是随机山地地图的制造代码!

直接复制到地图最上面就行了!

不过有个弊端

你用了就知道

emotion_雷电猴_捂嘴笑

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

有人要代码师或建模师吗

本人最近每天在线超过2小时!

非诚勿扰

诚者在下方回帖发链接!

emotion_编程猫_嗨起来

本人BOX3账号和编程猫同名

谢谢!


回复

上一页1 页 / 共 1下一页
NomenNomen

第一段代码第一行第一个词是function,改一下

点赞0


评论


tiger666250tiger666250

《我就想问问如何用地形代码制造一些坡度较为平缓的山地切高度别太高》

 

《我是代码小白》

点赞0


评论


雷凌1号雷凌1号

过来做个围墙,可以吗?

点赞0


评论


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

欸,我偏要进来

点赞0


评论


YDS尹子YDS尹子

柏林噪音yyds(doge)

你可以去看看柏林噪音算法哦

center_image

 

点赞0


评论


NeutrophilsNotNeutrophilsNot

bs

点赞0


评论


NeutrophilsNotNeutrophilsNot

???

点赞0


评论


Forzen_SevenForzen_Seven

不要误导萌新,第一行就有问题)

点赞0


评论