drawing fixed

This commit is contained in:
2024-04-23 14:53:26 +02:00
Unverified
parent 0644f61523
commit afc9db7a14
2 changed files with 9 additions and 5 deletions

View File

@@ -6,7 +6,7 @@ class App:
def __init__(self): def __init__(self):
self.renderer = Renderer(1280, 720) self.renderer = Renderer(1280, 720)
self.renderer.caption = "Virtual camera" self.renderer.caption = "3D Renderer"
def main(self): def main(self):
obj_builder1 = ObjectBuilder() obj_builder1 = ObjectBuilder()

View File

@@ -17,19 +17,23 @@ class Object:
def draw(self): def draw(self):
vertices_matrix = np.array([[v.x, v.y, v.z, 1.0] for v in self.vertices]) 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() 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 @ self.__renderer.camera.projection_matrix()
vertices_matrix /= vertices_matrix[:, -1].reshape(-1, 1) vertices_matrix /= vertices_matrix[:, -1].reshape(-1, 1)
vertices_matrix = vertices_matrix @ self.__renderer.camera.screen_matrix() vertices_matrix = vertices_matrix @ self.__renderer.camera.screen_matrix()
vertices_matrix = vertices_matrix[:, :2] vertices_matrix = vertices_matrix[:, :2]
vertices = {} vertices = {}
for i in range(len(self.vertices)): for i in range(len(self.vertices)):
if not hidden_vertices[i]:
vertices[self.vertices[i]] = vertices_matrix[i].tolist()[0] vertices[self.vertices[i]] = vertices_matrix[i].tolist()[0]
for v in vertices.values(): for v in vertices.values():
pg.draw.circle(self.__renderer.screen, pg.Color("black"), v, 2) pg.draw.circle(self.__renderer.screen, pg.Color("black"), v, 2)
for l in self.lines: for l in self.lines:
v1 = vertices[l[0]] v1 = vertices.get(l[0])
v2 = vertices[l[1]] 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) pg.draw.line(self.__renderer.screen, pg.Color("black"), v1, v2, 1)