Пример #1
0
 def flat(self, location, width, height):
     w = width/2
     h = height/2
     return Screen(
         Vector3(location[0] - width, 0.0, location[0] + height),
         Vector3(location[0] + width, 0.0, location[0] + height),
         Vector3(location[0] - width, 0.0, location[0] - height),
         Vector3(location[0] + width, 0.0, location[0] - height)
     )
Пример #2
0
def get_ico_sphere(subdivisions):
    with open(f'shapes/icosphere_sub{subdivisions}.data', 'rb') as f:
        triangles_pkl = pickle.load(f)
        triangles = []
        for t in triangles_pkl:
            triangles.append(
                Triangle3(Vector3(t[0][0], t[0][1], t[0][2]),
                          Vector3(t[1][0], t[1][1], t[1][2]),
                          Vector3(t[2][0], t[2][1], t[2][2])))
        return triangles
Пример #3
0
    def generate_triangle_pairs(self):
        self.triangles = []
        for i in range(len(self._line) - 1):

            prev = Vector3(0.0, 0.0, 0.0) if i == 0 else self._line[i - 1]
            nxt = Vector3(0.0, 0.0,
                          0.0) if i == len(self._line) - 2 else self._line[i +
                                                                           2]
            self.triangles.append(
                LineTriangle3(prev, self._line[i], self._line[i + 1], nxt,
                              self.ind_to_pos(i), self.ind_to_pos(i + 1),
                              self.width))
        return self.triangles
Пример #4
0
 def create_grid(self, grid_from, grid_to, grid_increment, radius):
     for i in frange(grid_from, grid_to + grid_increment, grid_increment):
         for j in frange(grid_from, grid_to + grid_increment,
                         grid_increment):
             polar = cart_to_polar((i, j), grid_to)
             cw = color_wheel(polar[0], polar[1])
             self.spheres.append(Sphere(radius, Vector3(i, j, 0.0), cw))
Пример #5
0
 def zoom(self, renderer, time, frametime):
     if abs(frametime) > 1500000:
         return
     if 2 < time and self.z > 2:
         self.camera_orthographic.update(self.z, self.z, -self.z, -self.z, 0.1, 1000)
         if self.camera_orthographic.position.z > 1:
             self.camera_orthographic.position -= Vector3(0.0, 0.0, 5*frametime)
         self.z -= frametime
Пример #6
0
    def setup(self, data, labels):
        self.spheres = SphereGrid(-2, 2, 1, radius = 0.03)
        self.lines = LineGrid(-20,20, grid_increment=2, sections=500)
        self.grid = Grid(-20, 20, grid_width=0.0008)
        self.vector = VectorR.straight_vector(Vector3(0,0,0.01), Vector3(4,4,0.01), 0.5, 0.026)

        self.spherer = Sphere(0.01, Vector3(0,0,0))

        self.datas = SphereCollection(0.003)
        for d in range(len(data)):
            self.datas.add(
                Vector(*data[d]).pad_to(3),
                Vector(*labels[d]).pad_to(3),
            )

        self.screen = Screen(
            Vector3(0,0,5),
            Vector3(5,5,6),
            Vector3(0,0,0),
            Vector3(5,5,1)
        )

        self.scene.add_scene_object(self.grid)
        # self.scene.add_scene_object(self.vector)
        # self.scene.add_scene_object(self.spheres)
        self.scene.add_scene_object(self.lines)
        self.scene.add_scene_object(self.datas)
        # self.scene.add_scene_object(self.spherer)
        

        for l in self.neural_network.layers_history[-1]:
            mat = Matrix.from_array(l['weights']).pad_to(3)
            trans = Vector.from_array(l['bias']).pad_to(3)
            self.scene.add_mba_step_transformation(mat, trans, SIGMOID_FUNC, (0,5), (0,5), (0,5))
Пример #7
0
    def __init__(self, data, layers, labels):
        if len(data) != len(labels):
            raise RuntimeError("labels and data dont match")

        self.renderer = WindowRenderer()

        self.ang = 0
        self.camera_perspective = PerspectiveCamera(Vector3(0.0, 5.0, 5.0), 0.1, 1000, 1, math.pi/3)
        self.camera_perspective.look_at(Vector3(0.0,0.0,0.0), Vector3(0.0,0.0,1.0))

        self.z = 20
        self.camera_orthographic = OrthographicCamera(Vector3(0.0, 0.0, 100.0), self.z, self.z, -self.z, -self.z, 0.1, 1000)
        self.camera_orthographic.look_at(Vector3(0.0,0.0,0.0), Vector3(1.0,0.0,0.0))

        self.scene = NNScene(self.camera_orthographic, self.renderer)
        self.scene.renderer.add_before_render_function(self.zoom)

        # self.scene_out = NNScene(self.camera_perspective, self.renderer, size = (3000, 3000))
        # self.scene_out.renderer.add_before_render_function(self.rotate)

        # self.scene = NNScene(self.camera_orthographic, self.renderer)
        # self.scene.renderer.add_before_render_function(self.zoom)

        self.neural_network = NNTrainer(data, layers, labels)
        self.neural_network.n_training_epochs(100000)

        self.setup(data, labels)
Пример #8
0
    def generate_unit_icosphere(self, subdivisions):
        T = 4**subdivisions
        verts = [0 for i in range((10 * T + 2) * 3)]
        set_arr(verts, 0, self.init_verts)

        tris = self.init_tris

        v = 12

        mid_cache = None if subdivisions == 0 else {}

        for i in range(subdivisions):
            # subdivide each triangle into 4 triangles
            triangles_next = [0 for _ in range(len(tris) * 4)]
            for k in range(0, len(tris), 3):
                v1 = tris[k]
                v2 = tris[k + 1]
                v3 = tris[k + 2]
                (a, v) = self._add_mid_point(v1, v2, verts, mid_cache, v)
                (b, v) = self._add_mid_point(v2, v3, verts, mid_cache, v)
                (c, v) = self._add_mid_point(v3, v1, verts, mid_cache, v)
                set_arr(triangles_next, k * 4,
                        [v1, a, c, v2, b, a, v3, c, b, a, b, c])
            tris = triangles_next

        verts_temp = []
        for i in range(0, len(verts), 3):
            curr_vert = Vector3(verts[i], verts[i + 1], verts[i + 2])
            verts_temp.append(curr_vert.normalize())

        triangles = []
        for k in range(0, len(tris), 3):
            v1 = verts_temp[tris[k + 0]]
            v2 = verts_temp[tris[k + 1]]
            v3 = verts_temp[tris[k + 2]]
            triangles.append(Triangle3(v1, v2, v3))

        return triangles
Пример #9
0
    def create_grid(self, grid_from, grid_to, grid_width, grid_increment,
                    sections):
        grid = []

        for i in frange(grid_from, 0, grid_increment):
            line = Line(
                self.straight_line_pts(sections, Vector3(i, grid_from, 0),
                                       Vector3(i, grid_to, 0)), grid_width,
                (0.75, 0.75, 0.75))
            grid.append(line)

        for i in frange(1, grid_to + 1, grid_increment):
            line = Line(
                self.straight_line_pts(sections, Vector3(i, grid_from, 0),
                                       Vector3(i, grid_to, 0)), grid_width,
                (0.75, 0.75, 0.75))
            grid.append(line)

        for i in frange(grid_from, 0, grid_increment):
            line = Line(
                self.straight_line_pts(sections, Vector3(grid_from, i, 0),
                                       Vector3(grid_to, i, 0)), grid_width,
                (0.75, 0.75, 0.75))
            grid.append(line)

        for i in frange(1, grid_to + 1, grid_increment):
            line = Line(
                self.straight_line_pts(sections, Vector3(grid_from, i, 0),
                                       Vector3(grid_to, i, 0)), grid_width,
                (0.75, 0.75, 0.75))
            grid.append(line)

        line = Line(
            self.straight_line_pts(sections, Vector3(0, 0, grid_from),
                                   Vector3(0, 0, grid_to)), grid_width,
            (1.0, 0.0, 0.0))
        grid.append(line)

        line = Line(
            self.straight_line_pts(sections, Vector3(0, grid_from, 0),
                                   Vector3(0, grid_to, 0)), grid_width,
            (0.0, 1.0, 0.0))
        grid.append(line)

        line = Line(
            self.straight_line_pts(sections, Vector3(grid_from, 0, 0),
                                   Vector3(grid_to, 0, 0)), grid_width,
            (0.0, 0.0, 1.0))
        grid.append(line)

        return grid
Пример #10
0
 def rotate(self, renderer, time, frametime):
     if abs(frametime) > 1500000:
         return
     self.camera_perspective.position = Vector3(10*math.cos(self.ang), 10*math.sin(self.ang), 5)
     self.ang += frametime*0.2
Пример #11
0
    def __init__(self, byte_array):
        # Configure to use pyglet window
        settings.WINDOW['class'] = 'moderngl_window.context.pyglet.Window'
        settings.WINDOW['size'] = (720, 720)
        settings.WINDOW['aspect_ratio'] = 1

        self.wnd = moderngl_window.create_window_from_settings()

        self.ctx = self.wnd.ctx
        self.ctx.enable(moderngl.DEPTH_TEST)

        # register event methods
        self.wnd.resize_func = self.resize
        self.wnd.iconify_func = self.iconify
        self.wnd.key_event_func = self.key_event
        self.wnd.mouse_position_event_func = self.mouse_position_event
        self.wnd.mouse_drag_event_func = self.mouse_drag_event
        self.wnd.mouse_scroll_event_func = self.mouse_scroll_event
        self.wnd.mouse_press_event_func = self.mouse_press_event
        self.wnd.mouse_release_event_func = self.mouse_release_event
        self.wnd.unicode_char_entered_func = self.unicode_char_entered
        self.wnd.close_func = self.close

        with open("shaders/tri_vert_shader.glsl") as f:
            vertex_shader = f.read()

        with open("shaders/tri_frag_shader.glsl") as f:
            fragment_shader = f.read()

        self.prog = self.ctx.program(
            vertex_shader=vertex_shader,
            fragment_shader=fragment_shader,
        )

        self.clear_color = (1.0, 1.0, 1.0)

        eye = Vector3(5.0, 0.0, 5.0)
        center = Vector3(0.0, 0.0, 0.0)
        up = Vector3(0.0, 0.0, 1.0)

        self.prog['camera_pos'].value = eye.to_tuple()

        self.look = Matrix4.look_at(center, eye, up)
        self.perspective_matrix = Matrix4.perspective_projection(
            0.1, 1000, 1, math.pi / 3)
        self.orthoganal_matrix = Matrix4.orthographic_projection(
            5, 5, -5, -5, 0.1, 1000)

        self.proj_matrix = self.look @ self.perspective_matrix
        self.prog['projection_matrix'].value = self.proj_matrix.to_tuple()

        self.prog['time'].value = 0

        self.prog['change_matrix'].value = Matrix3.random(-1, 1).to_tuple()
        self.prog['change_bias'].value = Vector3.random(-5, 5).to_tuple()
        self.prog['matrix_change_start_stop_time'].value = (0, 5)
        self.prog['bias_change_start_stop_time'].value = (5, 10)
        self.prog['activation_function_change_start_stop_time'].value = (10,
                                                                         15)

        self.shader_args = ("3f4 3f4 3f4 3f4 2f4 3f4 3f4 1f4 3f4 u1 /v",
                            "from_vert", "to_vert", "tangent_translate_from",
                            "tangent_translate_to",
                            "point_transform_start_stop_time", "normal",
                            "light_direction", "width_scale", "in_color",
                            "type")

        self.vbo = self.ctx.buffer(byte_array)
        self.vao = self.ctx.vertex_array(self.prog, [
            (self.vbo, *self.shader_args),
        ])