猫史档案馆


【box3】终极地形生成器!

用户:YDS尹子YDS尹子查看:104360 回复:93 评论:41 创建时间:2021-03-14T17:50:54


核心代码算法是从网上找的)

center_image

var 喵ooth=2.5;/*平滑程度,数字越小山越高 */
var waterLevel=12;/*水面高度 */
var size=256;/*地图边长 */
var Tree=true;/*自动生成树 */
var ImprovedNoise = function () {

	var p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,
		 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,
		 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,
		 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,
		 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 1喵, 100, 109, 198, 173, 186, 3, 喵, 52, 217, 226, 250, 124, 123, 5,
		 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,
		 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,
		 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,
		 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,
		 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];

	for ( var i = 0; i < 256; i ++ ) {

		p[ 256 + i ] = p[ i ];

	}

	function fade( t ) {

		return t * t * t * ( t * ( t * 6 - 15 ) + 10 );

	}

	function lerp( t, a, b ) {

		return a + t * ( b - a );

	}

	function grad( hash, x, y, z ) {

		var h = hash & 15;
		var u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;
		return ( ( h & 1 ) == 0 ? u : - u ) + ( ( h & 2 ) == 0 ? v : - v );

	}

	return {

		noise: function ( x, y, z ) {

			var floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );

			var X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;

			x -= floorX;
			y -= floorY;
			z -= floorZ;

			var xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;

			var u = fade( x ), v = fade( y ), w = fade( z );

			var A = p[ X ] + Y, AA = p[ A ] + Z, AB = p[ A + 1 ] + Z, B = p[ X + 1 ] + Y, BA = p[ B ] + Z, BB = p[ B + 1 ] + Z;

			return lerp( w, lerp( v, lerp( u, grad( p[ AA ], x, y, z ),
				grad( p[ BA ], xMinus1, y, z ) ),
			lerp( u, grad( p[ AB ], x, yMinus1, z ),
				grad( p[ BB ], xMinus1, yMinus1, z ) ) ),
			lerp( v, lerp( u, grad( p[ AA + 1 ], x, y, zMinus1 ),
				grad( p[ BA + 1 ], xMinus1, y, zMinus1 ) ),
			lerp( u, grad( p[ AB + 1 ], x, yMinus1, zMinus1 ),
				grad( p[ BB + 1 ], xMinus1, yMinus1, zMinus1 ) ) ) );

		}
	};

};



function generateHeight(width, height) {

    const size = width * height, data = new Uint8Array(size),
        perlin = new ImprovedNoise(), z = Math.random() * 100;

    let quality = 1;

    for (let j = 0; j < 4; j++) {

        for (let i = 0; i < size; i++) {

            const x = i % width, y = ~ ~(i / width);
            data[i] += Math.abs(perlin.noise(x / quality, y / quality, z) * quality * 1.75);

        }

        quality *= 5;

    }

    return data;

}
(async function(){
    function tree(x,y,z){
        if(voxels.getVoxel(x,y,z)!=voxels.id("water")){var rand=1;
        for(let i=y+rand;i<y+4+rand;i++){voxels.setVoxel(x,i,z,"acacia");}
        for(let i=3+rand;i<5+rand;i++){for(let j=-2;j<3;j++){for(let k=-2;k<3;k++){voxels.setVoxel(x+j,y+i,z+k,"green_leaf");}}}
        for(let j=-1;j<2;j++){for(let k=-1;k<2;k++){voxels.setVoxel(x+j,y+5+rand,z+k,"green_leaf");}}
        voxels.setVoxel(x-1,y+6+rand,z,"green_leaf");voxels.setVoxel(x,y+6+rand,z,"green_leaf");voxels.setVoxel(x+1,y+6+rand,z,"green_leaf");voxels.setVoxel(x,y+6+rand,z-1,"green_leaf");voxels.setVoxel(x,y+6+rand,z+1,"green_leaf");
        } 
    };
    async function spawnTree(){
    for(let i=0;i<257;i++){
    for(let j=0;j<257;j++){for(let k=0;k<50;k++){if(voxels.getVoxel(i,k,j)==voxels.id("grass")){if(Math.random()*150<=1){
        tree(i,k,j);
    }}}}
    await sleep(10);
}
}
    console.log("start");
    var dat=generateHeight(size,size);
    for(let i=0;i<=dat.length;i+=size){
        for(let j=i;j<=i+size;j++){
            var x=i/size,y=Math.round(dat[j]/喵ooth+2),z=j-i;
            if(y>waterLevel)voxels.setVoxel(x,y,z,"grass");
            else if(y==waterLevel)voxels.setVoxel(x,y,z,"sand");
            else{voxels.setVoxel(x,y,z,"dirt");for(let s=y+1;s<=waterLevel;s++)voxels.setVoxel(x,s,z,"water");}
            for(let s=1;s<y;s++)voxels.setVoxel(x,s,z,"dirt");
            if(Math.random()<0.1)await sleep(2);
        }
        
    }
    if(Tree){
        spawnTree();
    }
    console.log("生成完毕")
})()


回复

上一页第 1 页 / 共 4 页下一页
SKQASKQA

沙发

点赞0


评论


YDS尹子YDS尹子

https://threejs.org/examples/?q=terr#webgl_geometry_terrain_raycast

核心算法出处

点赞3


评论

这才是我要的柏林噪音()nb()

太厉害了!

nb

勉强做了个mc地形,但不会挖矿!!!!哎

这不叫柏林噪音

传奇,我和你说一件事好吗?

不行啊

nb

厉害了喵

你退了?)

太厉害了

尹子你不是退岛了吗?

。。。。。。。


SKQASKQA

喵=s m(求置顶)

点赞0


评论

置顶!


YDS尹子YDS尹子

喵喵

点赞0


评论

wtf

尹子我想和你一起研究速建()

来个雪山的()1.17那种()


面具狐狸云绾兮面具狐狸云绾兮

尹子生前最后一贴()

点赞0


评论

休得胡说!()

就是你在尹子酒里下了喵,我也有鼻子!!!(武松疯狂)

好哇,那课我们这已经学完了。。对了你是五年级的,白鹿?

凎()

白鹿の真实年龄喵


ZNS_哪吒ZNS_哪吒

喵

 

点赞0


评论


传奇无敌传奇无敌

所以尹子什么时候来实验系列帮我()()()

点赞0


评论

去起床编辑


ZNS_哪吒ZNS_哪吒

太nb了随机生成

点赞0


评论


芙兰朵露_斯卡雷特芙兰朵露_斯卡雷特

OHHHHHHHHHHHHHHHHHHHHHHHHHH

点赞0


评论


芙兰朵露_斯卡雷特芙兰朵露_斯卡雷特

一个船新地形生成器

点赞0


评论


小树同学小树同学

打卡~

点赞0


评论


你好2050_反防沉迷_反岛三出图形化你好2050_反防沉迷_反岛三出图形化

啊这,为什么没有运行时飞到一定的高度地图就会一直抖,为什么走到一定的海拔就会回到出生点?

点赞0


评论

大地图活动范围限制了,场景里可以调


天曌之子Joker天曌之子Joker

喵是什么?

点赞0


评论


传奇无敌传奇无敌

尹子快来实验系列啊啊啊啊啊,为啥高度这么低!!!咋调

点赞0


评论

实验系列的sql做好了没,sql做好了就能搞下界和末地,搞好了也能获得下届合金装备了

传奇实验坏了!

现在国际版1.17都出快照了你们还在忙alpha测试版本就被加入的东西


IaeaIaea

666

点赞0


评论


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

  

点赞0


评论


HardmeowHardmeow

  

点赞0


评论


AlcalaAlcala

第一个喵是啥

点赞0


评论


小树同学小树同学

好!

点赞0


评论

wowowo

wowowo


xwstsrhxwstsrh

要是水下也有沙子就好了

点赞0


评论


平凡的第五玩家平凡的第五玩家

喵=喵

点赞0


评论


可爱的独角蛛P8wG可爱的独角蛛P8wG

谢谢!

点赞0


评论


高贵的木叶龙A35d高贵的木叶龙A35d

dd

点赞0


评论


小熊与雪小熊与雪

怎么用?谁教教我?

点赞0


评论

用BOX3.0

em……我会了,你看看https://shequ.codemao.cn/community/375359


几何空间几何空间

赞!

尹子,我可能要用你这个代码

点赞0


评论


只知道嘤嘤的作某只知道嘤嘤的作某

这里提醒一下,喵=s.m

点赞0


评论


**************

wa

点赞0


评论


**************

wa

点赞0


评论


PercentLeePercentLee

怎么复制粘贴

点赞0


评论

ctrl a,ctrl c,ctrl v

谢谢!


CJP碧空万顷CJP碧空万顷

顶帖ing

点赞0


评论