コード例 #1
0
def test_transfromation_movement(
    vp_width,
    vp_height,
    pixel_ratio,
    cam_pos,
    point,
    delta,
):
    cam = Camera(
        viewport=(0, 0, vp_width, vp_height),
        pixel_ratio=pixel_ratio,
    )
    cam.position = cam_pos

    assume(delta.length != 0)

    point_moved = point + delta

    assume(point_moved !=
           point)  # This will happen when delta is too small to make an effect

    note(f"point moved: {point_moved}")

    diff = cam.translate_to_frame(point_moved) - cam.translate_to_frame(point)
    note(f"frame diff: {diff}")
    assert isclose(delta.length, pixel_ratio * diff.length, rel_tol=1e-4)
    diff = cam.translate_to_viewport(point_moved) - cam.translate_to_viewport(
        point)
    note(f"viewport diff: {diff}")
    assert isclose(diff.length, pixel_ratio * delta.length, rel_tol=1e-4)
コード例 #2
0
def test_transfromation_roundtrip(vp_width, vp_height, pixel_ratio, cam_pos,
                                  point):
    cam = Camera(
        viewport=(0, 0, vp_width, vp_height),
        pixel_ratio=pixel_ratio,
    )
    cam.position = cam_pos

    note(
        f"frame: ({cam.frame_left}, {cam.frame_bottom}) -> ({cam.frame_right}, {cam.frame_top})"
    )

    # Some underflow/loss of precision problems
    assume(cam.frame_left != cam.frame_right)
    assume(cam.frame_top != cam.frame_bottom)

    note(f"point: {point}")

    point_frame = cam.translate_to_frame(point)
    note(f"point->frame: {point_frame}")
    point_viewport = cam.translate_to_viewport(point_frame)
    note(f"point->frame->viewport: {point_viewport}")
    assert point_viewport.isclose(point, rel_tol=1e-5, rel_to=[cam.position])

    point_viewport = cam.translate_to_viewport(point)
    note(f"point->viewport: {point_viewport}")
    point_frame = cam.translate_to_frame(point_viewport)
    note(f"point->viewport->frame: {point_frame}")
    assert point_frame.isclose(point, rel_tol=1e-5, rel_to=[cam.position])
コード例 #3
0
def test_camera_translate_to_viewport():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=80)
    assert cam.position == Vector(0, 0)
    assert cam.translate_to_viewport(Vector(0, 0)) == Vector(400, 300)
    assert cam.translate_to_viewport(Vector(2, -1)) == Vector(560, 220)
    cam.position = Vector(5, 5)
    assert cam.translate_to_viewport(Vector(5, 5)) == Vector(400, 300)
    assert cam.translate_to_viewport(Vector(7, 4)) == Vector(560, 220)
コード例 #4
0
def test_camera_translate_to_viewport_2():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=1)
    assert cam.position == Vector(0, 0)
    assert cam.translate_to_viewport(Vector(0, 0)) == Vector(400, 300)
    assert cam.translate_to_viewport(Vector(100, 100)) == Vector(500, 200)
    assert cam.translate_to_viewport(Vector(-150, -500)) == Vector(250, 800)