DKL9 GitList
Repositories
DKL9 home
voxels
Code
Commits
Branches
Tags
Search
Tree:
74d48da
Branches
Tags
master
voxels
region.py
Surface-only mesh, crude mapgen, hidable crosshair
dkl9
commited
74d48da
at 2025-172 08:49:54
region.py
Blame
History
Raw
from libs import * import mesh def smoothstep(x): return x ** 2 * (3 - 2 * x) def interp(ab, t): return ab[0] + smoothstep(t) * (ab[1] - ab[0]) class WorldRegion(mesh.SquareMesh): def __init__(self, size=16): super().__init__() self.grid = np.zeros((size, size, size), dtype=VOXEL_TYPE) def add_voxel(self, pos, vt=1): self.grid[*pos] = vt def del_voxel(self, ind): self.grid[*self.faces[ind][1]] = 0 def remesh(self): offset = vec([0.5, 0.0, 0.0]) r = self.grid.shape[0] self.verts = np.empty((0, 3), dtype=FLOAT) self.faces = [] for i in range(r): for j in range(r): for k in range(r): p = [i, j, k] if self.grid[*p]: for d in range(3): for s in range(2): ts = (-1) ** s if p[d] == [r - 1, 0][s] or not self.grid[*(p + np.roll([ts, 0, 0], d))]: self.add_sq(ts * (d + 1), 1, p + ts * np.roll(offset, d), p) def gen_perlin(self, grads): r = self.grid.shape[0] corners = np.array([(i, j, k) for i in range(2) for j in range(2) for k in range(2)]) for i in range(r): for j in range(r): for k in range(r): w = np.array((i, j, k)) / r d = [np.dot(grads[*c], w) for c in corners] d = [interp(d[2 * k:2 * (k + 1)], w[2]) for k in range(4)] d = [interp(d[:2], w[1]), interp(d[2:4], w[1])] p = interp(d, w[0]) if p < 0.6: self.add_voxel((i, j, k))