def run(self): context = pg.Context(Program()) font = pg.Font(self, 2, FONT, 24, (0, 0, 0, 1)) self.message = 'loading triangle mesh' mesh = pg.STL('examples/%s.stl' % NAME).center() self.triangles = '%d triangles' % (len(mesh.positions) / 3) self.message = 'computing bounding box' (x0, y0, z0), (x1, y1, z1) = pg.bounding_box(mesh.positions) context.uv0 = (x0, z0) context.uv1 = (x1, z1) self.message = 'generating vertex buffer' context.position = pg.VertexBuffer(mesh.positions) self.message = 'generating height map' p = mesh.positions lookup = defaultdict(list) for v1, v2, v3 in zip(p[::3], p[1::3], p[2::3]): x, y, z = v1 x, z = int(round(x / STEP)), int(round(z / STEP)) lookup[(x, z)].append((v1, v2, v3)) self.message = 'loading brightness texture' context.sampler = pg.Texture(0, 'examples/%s.jpg' % NAME) self.message = 'loading normal texture' context.normal_sampler = pg.Texture(1, 'examples/%s.png' % NAME) self.result = { 'font': font, 'context': context, 'lookup': lookup, }
def setup(self): self.set_clear_color(0.87, 0.81, 0.70) self.wasd = pg.WASD(self, speed=10) self.wasd.look_at((0, 0, 0), (30, -5, 30)) self.context = pg.Context(pg.DirectionalLightProgram()) self.context.specular_multiplier = 0.25 self.context.ambient_color = (0.5, 0.5, 0.5) self.context.light_color = (0.5, 0.5, 0.5) self.context.use_texture = True self.context.sampler = pg.Texture(0, 'examples/gusev.jpg') mesh = pg.STL('examples/gusev.stl').smooth_normals() (x0, y0, z0), (x1, y1, z1) = pg.bounding_box(mesh.positions) for x, y, z in mesh.positions: u = 1 - (z - z0) / (z1 - z0) v = 1 - (x - x0) / (x1 - x0) mesh.uvs.append((u, v)) self.mesh = mesh p = self.mesh.positions self.lookup = defaultdict(list) for v1, v2, v3 in zip(p[::3], p[1::3], p[2::3]): x, y, z = v1 x, z = int(round(x)), int(round(z)) self.lookup[(x, z)].append((v1, v2, v3))