用户:
卑微OIer查看:6 回复:6 评论:6 创建时间:2022-12-26T18:49:04
function grad(x, y) {
var vec = [x * 127.1 + y * 311.7 + seed, y * 269.5 + y * 1283.3 + seed];
var sin0 = Math.sin(vec[0]) * 43758.5453123;
var sin1 = Math.sin(vec[1]) * 43758.5453123;
vec[0] = (sin0 - Math.floor(sin0)) * 2.0 - 1.0;
vec[1] = (sin1 - Math.floor(sin1)) * 2.0 - 1.0;
var len = Math.sqrt(Math.pow(vec[0], 2) + Math.pow(vec[1], 2))
vec[0] /= len, vec[1] /= len;
return vec;
}
function perlin(x,y) {
let p0x = Math.floor(x);
let p0y = Math.floor(y);
let p1x = p0x;
let p1y = p0x + 1;
let p2x = p0x + 1;
let p2y = p0y + 1;
let p3x = p0x + 1;
let p3y = p0y;
var g0x = grad(p0x, p0y)[0]; // P0点的梯度
var g0y = grad(p0x, p0y)[1];
var g1x = grad(p1x, p1y)[0]; // P1点的梯度
var g1y = grad(p1x, p1y)[1];
var g2x = grad(p2x, p2y)[0]; // P2点的梯度
var g2y = grad(p2x, p2y)[1];
var g3x = grad(p3x, p3y)[0]; // P3点的梯度
var g3y = grad(p3x, p3y)[1];
var v0x = x - p0x; // P0点的方向向量
var v0y = y - p0y;
var v1x = x - p1x; // P1点的方向向量
var v1y = y - p1y;
var v2x = x - p2x; // P2点的方向向量
var v2y = y - p2y;
var v3x = x - p3x; // P3点的方向向量
var v3y = y - p3y;
var product0 = g0x * v0x + g0y * v0y; // P0点梯度向量和方向向量的点乘
var product1 = g1x * v1x + g1y * v1y; // P1点梯度向量和方向向量的点乘
var product2 = g2x * v2x + g2y * v2y; // P2点梯度向量和方向向量的点乘
var product3 = g3x * v3x + g3y * v3y; // P3点梯度向量和方向向量的点乘
let d0 = x - p0x;
let t0 = 6 * Math.pow(d0, 5.0) - 15 * Math.pow(d0, 4) + 10 * Math.pow(d0, 3);
let n0 = product1 * (1.0 - t0) + product3 * t0;
let n1 = product0 * (1.0 - t0) + product3 * t0;
let d1 = y - p0y;
let t1 = Math.pow(d1, 5.0) - 15.0 * Math.pow(d1, 4.0) + 10.0 * Math.pow(d1, 3.0);
return n1*(1.0-t1)+n0*t1;
}
const zoom = document.querySelector('.zoom').value;
if(!NumberReg.test(zoom))return;
for (let x = 0; x < MAP_SHAPE; x++) {
for (let y = 0; y < MAP_SHAPE; y++) {
voxels[x][y].height = perlin(x,y);
}
}
我console.log(voxels)的所有height属性时是NaN求助