猫史档案馆


【box3】随机小行星生成代码

用户:trigonometrictrigonometric查看:1258 回复:20 评论:20 创建时间:2022-01-22T22:31:17


center_image

function per_1dim(dots,interval){
    var dot1,dot2,dif;
    var y=[];
    var i,j;
    for(i=1;i<dots.length;i++){
        dot1=dots[i];
        dot2=dots[i-1];
        dif=Math.abs(dot1-dot2);
        if(dot1<dot2){
            for(j=0;j<=3.14;j+=3.14/interval){
                y.push(dot2+(Math.cos(j)-1)/2*dif);
            }
        }else{
            for(j=3.14;j>=0;j-=3.14/interval){
                y.push(dot2+(Math.cos(j)+1)/2*dif);
            }
        }
    }
    return y;
}
function per_2dim(interval,min,max){
    var dots=[],y1=[],y2=[],y3=[];
    var x,y,z;
    for(x=0;x<=256;x+=interval){
        dots.push([]);
        for(z=0;z<=256;z+=interval){
            y=min+Math.random()*(max-min);
            dots[x/interval].push(y);
        }
    }
    for(x=0;x<=256;x+=interval){
        y1.push(per_1dim(dots[x/interval],interval));
    }
    for(x=0;x<=256;x++){
        y2.push([]);
        for(z=0;z<=256;z+=interval){
            y2[x].push(y1[z/interval][x]);
        }
    }
    for(x=0;x<=256;x++){
        y3.push(per_1dim(y2[x],interval));
    }
    return y3;
}
function per_3dim(interval,min,max){
    var y1=[],y2=[],y3=[];
    var x,y,z;
    for(y=0;y<=喵;y+=interval){
        y1.push(per_2dim(interval,min,max));
    }
    for(x=0;x<=256;x++){
        y2.push([]);
        for(z=0;z<=256;z++){
            y2[x].push([]);
            for(y=0;y<=喵;y+=interval){
                y2[x][z].push(y1[y/interval][x][z]);
            }
        }
    }
    for(x=0;x<=256;x++){
        y3.push([]);
        for(z=0;z<=256;z++){
            y3[x].push(per_1dim(y2[x][z],interval));
        }
    }
    return y3;
}
async function asteroid(density){
    var x,y,z;
    var per32=per_3dim(32,0,100);
    var per16=per_3dim(16,0,100);
    var per8=per_3dim(8,0,100);
    var l=[];
    for(x=0;x<=256;x++){
        l.push([]);
        for(z=0;z<=256;z++){
            l[x].push([]);
            for(y=0;y<=喵;y++){
                l[x][z].push(Math.ceil((per32[x][z][y]+per16[x][z][y]+per8[x][z][y])/3));
            }
        }
    }
    for(x=0;x<=256;x++){
        for(z=0;z<=256;z++){
            for(y=0;y<=喵;y++){
                if(l[x][z][y]>density){
                    voxels.setVoxelId(x,y,z,129);
                }
            }
        }
        await sleep(100);
    }
}
asteroid(70);


回复

上一页第 1 页 / 共 1 页下一页
全能代码师全能代码师

ddd

点赞1


评论


trigonometrictrigonometric

asteroid(density)

参数为小行星密度

范围0~100,数值越小小行星越密集,过大会串联在一起

点赞2


评论

原理:三维柏林噪声

随机地形生成代码:https://shequ.codemao.cn/community/422091


YDS尹子YDS尹子

三维噪声?

点赞4


评论

问一下您几年级)

话说这个原理是不是把很多余弦波叠在一起。?

初一

不是

原理在置顶的评论中


IaeaIaea

dddd

点赞1


评论


trigonometrictrigonometric

原理:

一维噪声:生成多个在同一条直线且间隔相等的点,在点与点之间“平滑”形成新的点;
二维噪声:生成多个z间隔相等的一维噪声,遍历x轴,在该x轴上的点与点之间“平滑”形成新的点;
三维噪声:生成多个y间隔相等的二维噪声,分别遍历x轴和z轴,在该x、z轴上点与点之间“平滑”形成新的点。
提示:以上所有点均表示数值,在利用二维噪声生成地形时所有点的数值表示为y,在利用三维噪声生成小行星时所有点表示一个数值,如果该数值超过了界限之后,则执行相应程序。

点赞3


评论

该帖子代码中的“平滑”函数可能不是真正意义上的柏林噪声,但也达到了“平滑”的效果

补充:应执行多次噪声后相加,本代码为取平均值

这个可能不算真正意义上的柏林噪声,只能说是类似

这个写了我也看不懂(大雾

OMG你把这个背景换成正常的山地,行星石头的ID改成空气,嵌到山地背景里,这活生生的就是洞穴啊

我找三维柏林找好久了,真的感谢

喵=洞·穴

好帖子不该被埋没


不知道该叫啥的一只萌新不知道该叫啥的一只萌新

拜膜大佬(

我只会一二维的高斯模糊...

点赞1


评论


浮生awa浮生awa

隐藏大佬?!!!

点赞2


评论


毛豆501毛豆501

喵d

点赞1


评论


一个STUB用户_14302596一个STUB用户_14302596

喵d

点赞2


评论


Stephan轩Stephan轩

nb啊

点赞1


评论


ZzhAllenZzhAllen

问一下这个代码能在自己的地图里用吗()

点赞0


评论


芜湖咸鱼芜湖咸鱼

woc!真不错,很少能见到这么好的代码了

点赞1


评论


该账号已被封禁该账号已被封禁

柏林,但不是噪声(bushi

点赞1


评论


企鹅vItY企鹅vItY

马喵

点赞1


评论

???

喵=牛/逼

e啊这


guxia666guxia666

nb啊

点赞0


评论


用户_869149用户_869149

顶顶顶

点赞0


评论

好久不见()

好久不见········


37303730

ddd

点赞0


评论


NelsonNelson

我还以为函数活了

 

点赞1


评论


SCS_user_8yNg1LeFg6SCS_user_8yNg1LeFg6

哇袄!坟

点赞0


评论


NelsonNelson

哇坟!

点赞0


评论