finished
This commit is contained in:
190
src/app.py
190
src/app.py
@@ -1,115 +1,97 @@
|
||||
import pygame as pg
|
||||
import numpy as np
|
||||
from math import *
|
||||
import src.constants as cn
|
||||
import transformation as tm
|
||||
from src.renderer import Renderer
|
||||
from src.object_builder import ObjectBuilder
|
||||
from src.object import Object
|
||||
from src.camera import Camera
|
||||
|
||||
|
||||
|
||||
class App:
|
||||
clock: pg.time.Clock
|
||||
screen: pg.Surface
|
||||
camera: Camera
|
||||
objects = list[Object]
|
||||
renderer : Renderer
|
||||
|
||||
def __init__(self):
|
||||
self.clock = pg.time.Clock()
|
||||
self.screen = pg.display.set_mode(cn.WINDOW_SIZE)
|
||||
self.objects = []
|
||||
self.camera = Camera(-5, 6, -55)
|
||||
self.create_objects()
|
||||
|
||||
def create_objects(self):
|
||||
obj_builder = ObjectBuilder()
|
||||
va = obj_builder.add_vertex(-1, -1, 1)
|
||||
vb = obj_builder.add_vertex( 1, -1, 1)
|
||||
vc = obj_builder.add_vertex( 1, 1, 1)
|
||||
vd = obj_builder.add_vertex(-1, 1, 1)
|
||||
ve = obj_builder.add_vertex(-1, -1, -1)
|
||||
vf = obj_builder.add_vertex( 1, -1, -1)
|
||||
vg = obj_builder.add_vertex( 1, 1, -1)
|
||||
vh = obj_builder.add_vertex(-1, 1, -1)
|
||||
obj_builder.add_vertices_connection(va, vb)
|
||||
obj_builder.add_vertices_connection(va, vd)
|
||||
obj_builder.add_vertices_connection(vd, vc)
|
||||
obj_builder.add_vertices_connection(vb, vc)
|
||||
obj_builder.add_vertices_connection(ve, vf)
|
||||
obj_builder.add_vertices_connection(ve, vh)
|
||||
obj_builder.add_vertices_connection(vh, vg)
|
||||
obj_builder.add_vertices_connection(vf, vg)
|
||||
obj_builder.add_vertices_connection(va, ve)
|
||||
obj_builder.add_vertices_connection(vb, vf)
|
||||
obj_builder.add_vertices_connection(vd, vh)
|
||||
obj_builder.add_vertices_connection(vc, vg)
|
||||
self.objects.append(obj_builder.build())
|
||||
self.renderer = Renderer(1280, 720)
|
||||
self.renderer.caption = "Virtual camera"
|
||||
|
||||
def main(self):
|
||||
self.setup()
|
||||
while True:
|
||||
self.clock.tick(cn.FPS)
|
||||
for event in pg.event.get():
|
||||
self.handle_event(event)
|
||||
self.update()
|
||||
obj_builder1 = ObjectBuilder()
|
||||
va = obj_builder1.add_vertex(-1, 1, 1)
|
||||
vb = obj_builder1.add_vertex( 1, 1, 1)
|
||||
vc = obj_builder1.add_vertex( 1, 3, 1)
|
||||
vd = obj_builder1.add_vertex(-1, 3, 1)
|
||||
ve = obj_builder1.add_vertex(-1, 1, -1)
|
||||
vf = obj_builder1.add_vertex( 1, 1, -1)
|
||||
vg = obj_builder1.add_vertex( 1, 3, -1)
|
||||
vh = obj_builder1.add_vertex(-1, 3, -1)
|
||||
obj_builder1.add_vertices_connection(va, vb)
|
||||
obj_builder1.add_vertices_connection(va, vd)
|
||||
obj_builder1.add_vertices_connection(vd, vc)
|
||||
obj_builder1.add_vertices_connection(vb, vc)
|
||||
obj_builder1.add_vertices_connection(ve, vf)
|
||||
obj_builder1.add_vertices_connection(ve, vh)
|
||||
obj_builder1.add_vertices_connection(vh, vg)
|
||||
obj_builder1.add_vertices_connection(vf, vg)
|
||||
obj_builder1.add_vertices_connection(va, ve)
|
||||
obj_builder1.add_vertices_connection(vb, vf)
|
||||
obj_builder1.add_vertices_connection(vd, vh)
|
||||
obj_builder1.add_vertices_connection(vc, vg)
|
||||
self.renderer.add_object(obj_builder1.build())
|
||||
|
||||
def handle_event(self, event: pg.event.Event):
|
||||
match event.type:
|
||||
case pg.QUIT:
|
||||
self.quit()
|
||||
case pg.KEYDOWN:
|
||||
match event.key:
|
||||
case pg.K_ESCAPE:
|
||||
self.quit()
|
||||
case pg.K_s:
|
||||
self.camera.move_backward()
|
||||
case pg.K_w:
|
||||
self.camera.move_forward()
|
||||
case pg.K_d:
|
||||
self.camera.move_right()
|
||||
case pg.K_a:
|
||||
self.camera.move_left()
|
||||
case pg.K_SPACE:
|
||||
self.camera.move_up()
|
||||
case pg.K_LSHIFT:
|
||||
self.camera.move_down()
|
||||
|
||||
def transform(self, transformation_matrix: np.matrix):
|
||||
for key in self.points.keys():
|
||||
point = self.points[key]
|
||||
self.points[key] = np.dot(transformation_matrix, point.reshape((3,1)))
|
||||
|
||||
def setup(self):
|
||||
pg.display.set_caption("Virtual camera")
|
||||
|
||||
def update(self):
|
||||
self.screen.fill((255,255,255))
|
||||
for obj in self.objects:
|
||||
obj.draw()
|
||||
pg.display.update()
|
||||
|
||||
def quit(self):
|
||||
pg.quit()
|
||||
exit()
|
||||
obj_builder2 = ObjectBuilder()
|
||||
wa = obj_builder2.add_vertex(-2, 0, 2)
|
||||
wb = obj_builder2.add_vertex( 2, 0, 2)
|
||||
wc = obj_builder2.add_vertex( 2, 4, 2)
|
||||
wd = obj_builder2.add_vertex(-2, 4, 2)
|
||||
we = obj_builder2.add_vertex(-2, 0, -2)
|
||||
wf = obj_builder2.add_vertex( 2, 0, -2)
|
||||
wg = obj_builder2.add_vertex( 2, 4, -2)
|
||||
wh = obj_builder2.add_vertex(-2, 4, -2)
|
||||
obj_builder2.add_vertices_connection(wa, wb)
|
||||
obj_builder2.add_vertices_connection(wa, wd)
|
||||
obj_builder2.add_vertices_connection(wd, wc)
|
||||
obj_builder2.add_vertices_connection(wb, wc)
|
||||
obj_builder2.add_vertices_connection(we, wf)
|
||||
obj_builder2.add_vertices_connection(we, wh)
|
||||
obj_builder2.add_vertices_connection(wh, wg)
|
||||
obj_builder2.add_vertices_connection(wf, wg)
|
||||
obj_builder2.add_vertices_connection(wa, we)
|
||||
obj_builder2.add_vertices_connection(wb, wf)
|
||||
obj_builder2.add_vertices_connection(wd, wh)
|
||||
obj_builder2.add_vertices_connection(wc, wg)
|
||||
self.renderer.add_object(obj_builder2.build())
|
||||
|
||||
obj_builder3 = ObjectBuilder()
|
||||
ua = obj_builder3.add_vertex(-14, 0, 10)
|
||||
ub = obj_builder3.add_vertex(-8, 0, 10)
|
||||
uc = obj_builder3.add_vertex(-8, 8, 10)
|
||||
ud = obj_builder3.add_vertex(-14, 8, 10)
|
||||
ue = obj_builder3.add_vertex(-14, 0, -2)
|
||||
uf = obj_builder3.add_vertex(-8, 0, -2)
|
||||
ug = obj_builder3.add_vertex(-8, 8, -2)
|
||||
uh = obj_builder3.add_vertex(-14, 8, -2)
|
||||
obj_builder3.add_vertices_connection(ua, ub)
|
||||
obj_builder3.add_vertices_connection(ua, ud)
|
||||
obj_builder3.add_vertices_connection(ud, uc)
|
||||
obj_builder3.add_vertices_connection(ub, uc)
|
||||
obj_builder3.add_vertices_connection(ue, uf)
|
||||
obj_builder3.add_vertices_connection(ue, uh)
|
||||
obj_builder3.add_vertices_connection(uh, ug)
|
||||
obj_builder3.add_vertices_connection(uf, ug)
|
||||
obj_builder3.add_vertices_connection(ua, ue)
|
||||
obj_builder3.add_vertices_connection(ub, uf)
|
||||
obj_builder3.add_vertices_connection(ud, uh)
|
||||
obj_builder3.add_vertices_connection(uc, ug)
|
||||
self.renderer.add_object(obj_builder3.build())
|
||||
|
||||
"""
|
||||
projected_points = {}
|
||||
obj_builder4 = ObjectBuilder()
|
||||
za = obj_builder4.add_vertex(-2, 0, 10)
|
||||
zb = obj_builder4.add_vertex( 2, 0, 10)
|
||||
zc = obj_builder4.add_vertex( 2, 0, 6)
|
||||
zd = obj_builder4.add_vertex(-2, 0, 6)
|
||||
ze = obj_builder4.add_vertex( 0, 8, 8)
|
||||
obj_builder4.add_vertices_connection(za, zb)
|
||||
obj_builder4.add_vertices_connection(za, zd)
|
||||
obj_builder4.add_vertices_connection(zd, zc)
|
||||
obj_builder4.add_vertices_connection(zb, zc)
|
||||
obj_builder4.add_vertices_connection(za, ze)
|
||||
obj_builder4.add_vertices_connection(zb, ze)
|
||||
obj_builder4.add_vertices_connection(zc, ze)
|
||||
obj_builder4.add_vertices_connection(zd, ze)
|
||||
self.renderer.add_object(obj_builder4.build())
|
||||
|
||||
for point_key in self.points.keys():
|
||||
point = self.points[point_key]
|
||||
projected_2D = np.dot(self.projection_matrix, point.reshape((3, 1)))
|
||||
|
||||
x = int(projected_2D[0][0] * self.scale) + (1280 / 2)
|
||||
y = int(projected_2D[1][0] * self.scale) + (720 / 2)
|
||||
|
||||
pg.draw.circle(self.screen, (255, 0, 0), (x, y), 5)
|
||||
|
||||
projected_points[point_key] = (x, y)
|
||||
|
||||
for line in self.lines:
|
||||
point_a = projected_points[line[0]]
|
||||
point_b = projected_points[line[1]]
|
||||
pg.draw.line(self.screen, (0,0,0), point_a, point_b)
|
||||
"""
|
||||
self.renderer.run()
|
||||
Reference in New Issue
Block a user