Example #1
0
    def to_look_at_direction(self, direction, up):
        '''
        Set this matrix to a *look at* matrix with a `direction` and a `up`
        vector.

        *Parameters:*

        - `direction`: Direction `Vector3`
        - `up`: Up `Vector3`
        '''
        vec_z = Vector3(direction).nor()
        vec_x = Vector3(direction).nor()
        vec_x.crs(up.nor()).nor()
        vec_y = Vector3(vec_x).crs(vec_z).nor()

        self.to_identity()
        self.values[0] = vec_x.x
        self.values[4] = vec_x.y
        self.values[8] = vec_x.z
        self.values[1] = vec_y.x
        self.values[5] = vec_y.y
        self.values[9] = vec_y.z
        self.values[2] = -vec_z.x
        self.values[6] = -vec_z.y
        self.values[10] = -vec_z.z

        return self
Example #2
0
 def __init__(self):
     self.position = Vector3()
     self.direction = Vector3()
     self.up = Vector3()
     self.projection = Matrix4()
     self.view = Matrix4()
     self.combined = Matrix4()
     self.inv_projection_view = Matrix4()
     self.near = 1
     self.far = 100
     self.viewport_width = 0
     self.viewport_height = 0
Example #3
0
 def update(self):
     aspect = self.viewport_width / self.viewport_height
     self.projection.to_projection(abs(self.near), abs(self.far),
                                   self.fov, aspect)
     self.view.to_look_at(Vector3().set(self.position).add(self.direction),
                          self.up)
     self.combined.set(self.projection).mul(self.view)
Example #4
0
def test_iter():
    vector = Vector3(1, 2, 3)
    for t in zip(vector, [1, 2, 3]):
        assert t[0] == t[1]

    vector = Vector2(1, 2)
    for t in zip(vector, [1, 2]):
        assert t[0] == t[1]
Example #5
0
    def update(self, update_frustum=True):
        self.projection.to_orthographic(
            self.zoom * -self.viewport_width / 2,
            self.zoom * self.viewport_width / 2,
            self.zoom * -self.viewport_height / 2,
            self.zoom * self.viewport_height / 2,
            self.near, self.far
        )

        target = Vector3(self.position).add(self.direction)
        self.view.to_look_at(self.position, target, self.up)
        self.combined.set(self.projection).mul(self.view)
        self.inv_projection_view.set(self.combined).inv()
Example #6
0
    def to_look_at(self, position, target, up):
        '''
        Set this matrix to a *look at* matrix with a `position`, `target` and
        `up` vector.

        *Parameters:*

        - `position`: Position `Vector3`
        - `direction`: Direction `Vector3`
        - `up`: Up `Vector3`
        '''
        # http://www.cs.virginia.edu/~gfx/Courses/1999/intro.fall99.html/lookat.html
        vec = Vector3(target).sub(position)
        self.to_look_at_direction(vec, up)
        translation = TransformationMatrix().to_translation(
            -position.x, -position.y, -position.z)
        self.mul(translation)

        return self
Example #7
0
 def __init__(self, fov, viewport_width, viewport_height):
     super().__init__()
     self.fov = fov
     self.viewport_width = viewport_width
     self.viewport_height = viewport_height
     self.tmp = Vector3()
Example #8
0
def test_equals():
    assert Vector3(1, 2, 3) == Vector3(1, 2, 3)
    assert Vector2(4, 5) == Vector2(4, 5)
Example #9
0
def test_init():
    assert len(Vector2(0, 0)) == 2
    assert len(Vector3(0, 0, 0)) == 3
Example #10
0
def test_operations_vector3():
    # Add
    assert Vector3(1, 2, 3) + 2 == Vector3(3, 4, 5)
    assert Vector3(1, 2, 3) + (3, 2, 1) == Vector3(4, 4, 4)
    assert Vector3(1, 2, 3) + Vector3(3, 2, 1) == Vector3(4, 4, 4)

    # Sub
    assert Vector3(1, 2, 3) - 2 == Vector3(-1, 0, 1)
    assert Vector3(1, 2, 3) - (3, 2, 1) == Vector3(-2, 0, 2)
    assert Vector3(1, 2, 3) - Vector3(3, 2, 1) == Vector3(-2, 0, 2)

    # Mul
    assert Vector3(1, 2, 3) * 2 == Vector3(2, 4, 6)
    assert Vector3(1, 2, 3) * (3, 2, 1) == Vector3(3, 4, 3)
    assert Vector3(1, 2, 3) * Vector3(3, 2, 1) == Vector3(3, 4, 3)

    # Div
    assert Vector3(0, 2, 4) / 2 == Vector3(0, 1, 2)
    assert Vector3(0, 2, 4) / (3, 2, 1) == Vector3(0, 1, 4)
    assert Vector3(0, 2, 4) / Vector3(3, 2, 1) == Vector3(0, 1, 4)