DKL9 GitList
Repositories
DKL9 home
voxels
Code
Commits
Branches
Tags
Search
Tree:
a93b274
Branches
Tags
master
voxels
src
attributes.py
Move source to src/
dkl9
commited
a93b274
at 2025-183 13:45:25
attributes.py
Blame
History
Raw
from libs import * import entity import types draw_modes = types.SimpleNamespace() draw_modes.TRI_STRIP = GL_TRIANGLE_STRIP draw_modes.TRI_FAN = GL_TRIANGLE_FAN draw_modes.TRIS = GL_TRIANGLES draw_modes.LINE_STRIP = GL_LINE_STRIP draw_modes.LINES = GL_LINES class AttributedEntity(entity.Entity): def __init__(self, verts, pos, col, **kwargs): super().__init__(verts, pos, **kwargs) self.col = vec(col) refl = [1.0, 0.0, 0.0, 1.0] if self.hud else [0.5, 0.5, 0.0, 32.0] self.refls = vec(kwargs.get("refls", refl)) self.texi = kwargs.get("texi", 0) self.draw_mode = kwargs.get("mode", GL_TRIANGLE_STRIP) self.vao = None self.vbos = [[None, 0] for _ in VERTEX_ATTRS] def mat_list(self): return np.repeat(vec([[self.col], [self.refls]]), len(self.verts), 1) def norm_list(self): l = [] match self.draw_mode: case draw_modes.TRI_STRIP | draw_modes.TRI_FAN: l.append(norm_tri(self.verts[:3])) for i in range(1, len(self.verts) - 1): l.append(norm_tri(self.verts[i - 1:i + 2])) l.append(norm_tri(self.verts[-3:])) case draw_modes.TRIS: for i in range(0, len(self.verts), 3): for _ in range(3): l.append(norm_tri(self.verts[i:i + 3])) case draw_modes.LINE_STRIP | draw_modes.LINES: for _ in range(len(self.verts)): l.append([1, 0, 0]) case _: raise NotImplementedError return (self.orient[:3, :3] @ vec(l).T).T def texc_list(self): if self.texi < 0: return np.repeat(vec([[0, 0, self.texi]]), len(self.verts), 0) match self.draw_mode: case draw_modes.TRI_FAN: return np.concatenate(( vec([[0, 0, self.texi]]), np.tile( [[0, 1, self.texi], [1, 0, self.texi]], ((len(self.verts) - 1) // 2, 1) ) )) case draw_modes.TRIS | draw_modes.TRI_STRIP: return np.astype(np.tile( [[0, 0, self.texi], [0, 1, self.texi], [1, 0, self.texi]], (int(np.ceil(len(self.verts) / 3)), 1) )[:len(self.verts)], FLOAT) case draw_modes.LINE_STRIP | draw_modes.LINES: return np.repeat(vec([[0, 0, 0]]), len(self.verts), 0) case _: raise NotImplementedError def build_vao(self): self.vao = glGenVertexArrays(1) glBindVertexArray(self.vao) for i in range(len(VERTEX_ATTRS)): self.vbos[i][0] = glGenBuffers(1) l = update_attr(self, i) glEnableVertexAttribArray(i) glVertexAttribPointer(i, l.shape[1], GL_FLOAT, GL_FALSE, 0, None)