def __init__(self, position, target, up_dir, projection): """Initialize a camera with its position, target point, and up_dir @position: Point3d @target: Point3d [this is the point towards it is facing @up_dir: Vector3d """ self.position = position self.target = target self.up_dir = up_dir self.facing_dir = Vector3d.new(self.position, self.target) # check if facing_dir and up_dir are perpendicular if self.facing_dir.dot(self.up_dir) != 0.0: raise Exception("facing dir and up dir are not perpendicular") self.__matrix = None self.projection = projection
return None def render_scene(self): for obj in self.objects: obj.render(self) self.__rendered = True def save_scene(self, filepath): if not self.__rendered: raise Exception('Scene not rendered/updated. Call render_scene() first.') self.image.save(filepath) if __name__ == '__main__': projection = Projection(5, 5, 5) # camera properties pos = Point3d(0, 0, 1) target = Point3d(0, 0, 2) up = Vector3d.new(Point3d.origin(), Point3d(0, 1, 0)) camera = Camera(pos, target, up, projection) size = 100 space = Space3d(camera, size, size, size, 10) print(space.transform_point(Point3d(1,1,2))) assert False space.add_axes() space.add_cells() print(len(space.objects)) space.render_scene() space.save_scene('test.png')