Beispiel #1
0
    def render(self, target: np.array, z_buffer: np.array, mesh: Mesh, **uniforms):
        positions, outputs = self.vertex_shader(mesh.vertices, mesh.vertex_normals, uniforms)
        screen = get_screen(to_clip(positions), resolution(target))
        z_buffer.fill(np.inf)

        for face in mesh.faces:
            varying = {k: v[face] for k, v in outputs.items()}
            draw_triangle(
                target,
                z_buffer,
                screen[face],
                self.fragment_shader,
                varying)
    def Split(self, data: np.array, outer: np.array, middle: np.array,
              inner: np.array, height: int, width: int):
        assert len(data.shape) >= 2
        assert len(outer.shape) >= 2
        assert len(middle.shape) >= 2
        assert len(inner.shape) >= 2

        s0 = max(0, math.floor((data.shape[0] - height) / 2))
        s1 = max(0, math.floor((data.shape[1] - width) / 2))
        e0 = min(data.shape[0], math.ceil((data.shape[0] + height) / 2))
        e1 = min(data.shape[1], math.ceil((data.shape[1] + width) / 2))

        np.resize(outer, data.shape)
        np.resize(middle, data.shape)
        np.resize(inner, data.shape)

        outer.fill(0)
        middle.fill(0)
        inner.fill(0)

        inner[s0:e0, s1:e1] = data[s0:e0, s1:e1]

        outer[:s0, :s1] = data[:s0, :s1]
        outer[:s0, e1:] = data[:s0, e1:]
        outer[e0:, :s1] = data[e0:, :s1]
        outer[e0:, e1:] = data[e0:, e1:]

        middle[:s0, s1:e1] = data[:s0, s1:e1]
        middle[e0:, s1:e1] = data[e0:, s1:e1]
        middle[s0:e0, :s1] = data[s0:e0, :s1]
        middle[s0:e0, e1:] = data[s0:e0, e1:]
 def normalize(self, item: np.array):
     if np.max(item) - np.min(item) != 0:
         return np.divide(item + np.min(item), np.max(item) - np.min(item))
     else:
         item.fill(1)
         return item