diff --git a/src/app.py b/src/app.py index a82ff45..4fbe8ba 100644 --- a/src/app.py +++ b/src/app.py @@ -6,7 +6,7 @@ class App: def __init__(self): self.renderer = Renderer(1280, 720) - self.renderer.caption = "Virtual camera" + self.renderer.caption = "3D Renderer" def main(self): obj_builder1 = ObjectBuilder() @@ -31,7 +31,7 @@ class App: obj_builder1.add_vertices_connection(vd, vh) obj_builder1.add_vertices_connection(vc, vg) self.renderer.add_object(obj_builder1.build()) - + obj_builder2 = ObjectBuilder() wa = obj_builder2.add_vertex(-2, 0, 2) wb = obj_builder2.add_vertex( 2, 0, 2) diff --git a/src/object.py b/src/object.py index be7a3a1..f32d367 100644 --- a/src/object.py +++ b/src/object.py @@ -17,19 +17,23 @@ class Object: def draw(self): vertices_matrix = np.array([[v.x, v.y, v.z, 1.0] for v in self.vertices]) vertices_matrix = vertices_matrix @ self.__renderer.camera.camera_matrix() + hidden_vertices = [row[0, 2] <= 0 for row in vertices_matrix] vertices_matrix = vertices_matrix @ self.__renderer.camera.projection_matrix() vertices_matrix /= vertices_matrix[:, -1].reshape(-1, 1) vertices_matrix = vertices_matrix @ self.__renderer.camera.screen_matrix() vertices_matrix = vertices_matrix[:, :2] vertices = {} for i in range(len(self.vertices)): - vertices[self.vertices[i]] = vertices_matrix[i].tolist()[0] + if not hidden_vertices[i]: + vertices[self.vertices[i]] = vertices_matrix[i].tolist()[0] for v in vertices.values(): pg.draw.circle(self.__renderer.screen, pg.Color("black"), v, 2) for l in self.lines: - v1 = vertices[l[0]] - v2 = vertices[l[1]] + v1 = vertices.get(l[0]) + v2 = vertices.get(l[1]) + if (v1 is None or v2 is None): + continue pg.draw.line(self.__renderer.screen, pg.Color("black"), v1, v2, 1) \ No newline at end of file