DKL9 GitList
Repositories
DKL9 home
voxels
Code
Commits
Branches
Tags
Search
Tree:
3f13a9c
Branches
Tags
master
voxels
src
mesh.py
Command-line options and tweak textures
dkl9
commited
3f13a9c
at 2025-184 01:10:44
mesh.py
Blame
History
Raw
from libs import * import attributes class SquareMesh(attributes.AttributedEntity): def __init__(self, **kwargs): super().__init__( np.empty((0, 3), dtype=FLOAT), [0.0, 1.0, 0.0, 1.0], [0.0, 0.0, 0.0], mode=GL_TRIANGLES, **kwargs ) self.faces = [] def add_sq(self, axis, width, pos, fd=1): w = width / 2 sq = pos + np.roll(vec([ [w, w, 0], [-w, w, 0], [w, -w, 0], [-w, -w, 0], [w, -w, 0], [-w, w, 0] ]), abs(axis), 1) if axis < 0: sq[1:3] = sq[2:0:-1] sq[4:6] = sq[5:3:-1] self.verts = np.concatenate((self.verts, sq), dtype=FLOAT) for i in range(2): self.faces.append((axis, fd)) def del_sq(self, ind): self.verts = np.delete(self.verts, np.s_[3 * ind:3 * (ind + 2)], 0) del self.faces[ind:ind + 2] def cube_mat(self, face_desc, axis, corner): if not isinstance(face_desc, int): face_desc = self.grid[*face_desc] face_orient = ((axis % 4) // 2) match face_desc: case 0: return (vec([0.0, 0.0, 0.0, 0.0]), vec([1.0, 0.0, 0.0, 1.0])) case 1: return ( vec([*np.add(0.5, axis2offset(axis, 0.4)), 1.0]), vec([1.0, 0.0, 0.1, 128.0]) ) case 2: top = (vec([0.8, 0.8, 1.5, 1.0]), vec([1.0, 0.0, 0.0, 1.0])) bottom = (vec([0.0, 0.0, 0.2, 1.0]), vec([1.0, 0.0, 0.0, 1.0])) match axis: case 2: return top case -2: return bottom case a: return bottom if corner & (2 >> face_orient) else top case 3: return (vec([0.5, 0.5, 0.6, 1.0]), vec([0.5, 0.5, 0.01, 16.0])) case 4: top = (vec([0.2, 0.6, 0.2, 1.0]), vec([0.6, 0.4, 0.0, 1.0])) bottom = (vec([0.5, 0.2, 0.0, 1.0]), vec([0.8, 0.2, 0.0, 1.0])) match axis: case 2: return top case -2: return bottom case a: return bottom if corner & (1 << face_orient) else top return case 5: core = (vec([1.0, 1.0, 0.8, 1.0]), vec([0.4, 1.6, 0.0, 1.0])) bark = (vec([0.4, 0.3, 0.0, 1.0]), vec([0.5, 0.5, 0.0, 1.0])) match axis: case 2 | -2: return core case _: return bark case 6: return (vec([0.2, 0.6, 0.2, 0.5]), vec([0.6, 0.4, 0.01, 4.0])) def mat_list(self): cl = np.empty((2, 3 * len(self.faces), 4), dtype=FLOAT) for s in range(len(self.faces) // 2): axis, fd = self.faces[2 * s] for (t, c) in enumerate([0, 1, 2, 3, 2, 1]): i = 6 * s + t cl[0][i], cl[1][i] = self.cube_mat(fd, axis, c) return cl def texc_list(self): if self.texi < 0: return np.repeat(vec([[0, 0, self.texi]]), len(self.verts), 0) sq = [(0, 0), (0, 1), (1, 0), (1, 1), (1, 0), (0, 1)] l = [] hg = hasattr(self, "grid") for i in range(len(self.faces) // 2): for (x, y) in sq: fd = self.faces[2 * i][1] l.append([x, y, self.grid[*fd] if hg else fd]) return vec(l)