# Matrix functions

## Matrix33

3x3 Matrix which supports rotation, translation, scale and skew.

Matrices are laid out in row-major format and can be loaded directly into OpenGL. To convert to column-major format, transpose the array using the numpy.array.T method.

pyrr.matrix33.apply_to_vector(mat, vec)

  Apply a matrix to a vector.

  The matrix’s rotation are applied to the vector. Supports multiple matrices and vectors.

  Parameters:

    - mat (numpy.array) – The rotation / translation matrix. Can be a list of matrices.

    - vec (numpy.array) – The vector to modify. Can be a list of vectors.

  Return type:

    numpy.array

  Returns:

    The vectors rotated by the specified matrix.

pyrr.matrix33.create_direction_scale(direction, scale)

  Creates a matrix which can apply a directional scaling to a set of vectors.

  An example usage for this is to flatten a mesh against a single plane.

  Parameters:

    - direction (numpy.array) – a numpy.array of shape (3,) of the direction to scale.

    - scale (float) – a float value for the scaling along the specified direction. A scale of 0.0 will flatten the vertices into a single plane with the direction being the plane’s normal.

  Return type:

    numpy.array

  Returns:

    The scaling matrix.

pyrr.matrix33.create_from_axis_rotation(axis, theta, dtype=None)

  Creates a matrix from the specified theta rotation around an axis.

  Parameters:

    - axis (numpy.array) – A (3,) vector specifying the axis of rotation.

    - theta (float) – A rotation speicified in radians.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (3,3).

pyrr.matrix33.create_from_eulers(eulers, dtype=None)

  Creates a matrix from the specified Euler rotations.

  Parameters:

    eulers (numpy.array) – A set of euler rotations in the format specified by the euler modules.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (3,3) with the euler’s rotation.

pyrr.matrix33.create_from_inverse_of_quaternion(quat, dtype=None)

  Creates a matrix with the inverse rotation of a quaternion.

  Parameters:

    quat (numpy.array) – The quaternion to make the matrix from (shape 4).

  Return type:

    numpy.array

  Returns:

    A matrix with shape (3,3) that respresents the inverse of the quaternion.

pyrr.matrix33.create_from_matrix44(mat, dtype=None)

  Creates a Matrix33 from a Matrix44.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (3,3) with the input matrix rotation.

pyrr.matrix33.create_from_quaternion(quat, dtype=None)

  Creates a matrix with the same rotation as a quaternion.

  Parameters:

    quat – The quaternion to create the matrix from.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (3,3) with the quaternion’s rotation.

pyrr.matrix33.create_from_scale(scale, dtype=None)

  Creates an identity matrix with the scale set.

  Parameters:

    scale (numpy.array) – The scale to apply as a vector (shape 3).

  Return type:

    numpy.array

  Returns:

    A matrix with shape (3,3) with the scale set to the specified vector.

pyrr.matrix33.create_from_x_rotation(theta, dtype=None)

  Creates a matrix with the specified rotation about the X axis.

  Parameters:

    theta (float) – The rotation, in radians, about the X-axis.

  Return type:

    numpy.array

  Returns:

    A matrix with the shape (3,3) with the specified rotation about the X-axis.

  See also

  http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

pyrr.matrix33.create_from_y_rotation(theta, dtype=None)

  Creates a matrix with the specified rotation about the Y axis.

  Parameters:

    theta (float) – The rotation, in radians, about the Y-axis.

  Return type:

    numpy.array

  Returns:

    A matrix with the shape (3,3) with the specified rotation about the Y-axis.

  See also

  http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

pyrr.matrix33.create_from_z_rotation(theta, dtype=None)

  Creates a matrix with the specified rotation about the Z axis.

  Parameters:

    theta (float) – The rotation, in radians, about the Z-axis.

  Return type:

    numpy.array

  Returns:

    A matrix with the shape (3,3) with the specified rotation about the Z-axis.

  See also

  http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

pyrr.matrix33.create_identity(dtype=None)

  Creates a new matrix33 and sets it to an identity matrix.

  Return type:

    numpy.array

  Returns:

    A matrix representing an identity matrix with shape (3,3).

pyrr.matrix33.inverse(mat)

  Returns the inverse of the matrix.

  This is essentially a wrapper around numpy.linalg.inv.

  Parameters:

    m (numpy.array) – A matrix.

  Return type:

    numpy.array

  Returns:

    The inverse of the specified matrix.

  See also

  http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html

pyrr.matrix33.multiply(m1, m2)

  Multiply two matricies, m1 . m2.

  This is essentially a wrapper around numpy.dot( m1, m2 )

  Parameters:

    - m1 (numpy.array) – The first matrix. Can be a list of matrices.

    - m2 (numpy.array) – The second matrix. Can be a list of matrices.

  Return type:

    numpy.array

  Returns:

    A matrix that results from multiplying m1 by m2.

## Matrix44

4x4 Matrix which supports rotation, translation, scale and skew.

Matrices are laid out in row-major format and can be loaded directly into OpenGL. To convert to column-major format, transpose the array using the numpy.array.T method.

pyrr.matrix44.apply_to_vector(mat, vec)

  Apply a matrix to a vector.

  The matrix’s rotation and translation are applied to the vector. Supports multiple matrices and vectors.

  Parameters:

    - mat (numpy.array) – The rotation / translation matrix. Can be a list of matrices.

    - vec (numpy.array) – The vector to modify. Can be a list of vectors.

  Return type:

    numpy.array

  Returns:

    The vectors rotated by the specified matrix.

pyrr.matrix44.create_from_axis_rotation(axis, theta, dtype=None)

  Creates a matrix from the specified rotation theta around an axis.

  Parameters:

    - axis (numpy.array) – A (3,) vector.

    - theta (float) – A rotation in radians.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4).

pyrr.matrix44.create_from_eulers(eulers, dtype=None)

  Creates a matrix from the specified Euler rotations.

  Parameters:

    eulers (numpy.array) – A set of euler rotations in the format specified by the euler modules.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4) with the euler’s rotation.

pyrr.matrix44.create_from_inverse_of_quaternion(quat, dtype=None)

  Creates a matrix with the inverse rotation of a quaternion.

  This can be used to go from object space to intertial space.

  Parameters:

    quat (numpy.array) – The quaternion to make the matrix from (shape 4).

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4) that respresents the inverse of the quaternion.

pyrr.matrix44.create_from_matrix33(mat, dtype=None)

  Creates a Matrix44 from a Matrix33.

  The translation will be 0,0,0.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4) with the input matrix rotation.

pyrr.matrix44.create_from_quaternion(quat, dtype=None)

  Creates a matrix with the same rotation as a quaternion.

  Parameters:

    quat – The quaternion to create the matrix from.

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4) with the quaternion’s rotation.

pyrr.matrix44.create_from_scale(scale, dtype=None)

  Creates an identity matrix with the scale set.

  Parameters:

    scale (numpy.array) – The scale to apply as a vector (shape 3).

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4) with the scale set to the specified vector.

pyrr.matrix44.create_from_translation(vec, dtype=None)

  Creates an identity matrix with the translation set.

  Parameters:

    vec (numpy.array) – The translation vector (shape 3 or 4).

  Return type:

    numpy.array

  Returns:

    A matrix with shape (4,4) that represents a matrix with the translation set to the specified vector.

pyrr.matrix44.create_from_x_rotation(theta, dtype=None)

  Creates a matrix with the specified rotation about the X axis.

  Parameters:

    theta (float) – The rotation, in radians, about the X-axis.

  Return type:

    numpy.array

  Returns:

    A matrix with the shape (4,4) with the specified rotation about the X-axis.

  See also

  http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

pyrr.matrix44.create_from_y_rotation(theta, dtype=None)

  Creates a matrix with the specified rotation about the Y axis.

  Parameters:

    theta (float) – The rotation, in radians, about the Y-axis.

  Return type:

    numpy.array

  Returns:

    A matrix with the shape (4,4) with the specified rotation about the Y-axis.

  See also

  http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

pyrr.matrix44.create_from_z_rotation(theta, dtype=None)

  Creates a matrix with the specified rotation about the Z axis.

  Parameters:

    theta (float) – The rotation, in radians, about the Z-axis.

  Return type:

    numpy.array

  Returns:

    A matrix with the shape (4,4) with the specified rotation about the Z-axis.

  See also

  http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions

pyrr.matrix44.create_identity(dtype=None)

  Creates a new matrix44 and sets it to an identity matrix.

  Return type:

    numpy.array

  Returns:

    A matrix representing an identity matrix with shape (4,4).

pyrr.matrix44.create_look_at(eye, target, up, dtype=None)

  Creates a look at matrix according to OpenGL standards.

  Parameters:

    - eye (numpy.array) – Position of the camera in world coordinates.

    - target (numpy.array) – The position in world coordinates that the camera is looking at.

    - up (numpy.array) – The up vector of the camera.

  Return type:

    numpy.array

  Returns:

    A look at matrix that can be used as a viewMatrix

pyrr.matrix44.create_matrix33_view(mat)

  Returns a view into the matrix in Matrix33 format.

  This is different from matrix33.create_from_matrix44, in that changes to the returned matrix will also alter the original matrix.

  Return type:

    numpy.array

  Returns:

    A view into the matrix in the format of a matrix33 (shape (3,3)).

pyrr.matrix44.create_orthogonal_projection(left, right, bottom, top, near, far, dtype=None)

  Creates an orthogonal projection matrix.

  Parameters:

    - left (float) – The left of the near plane relative to the plane’s centre.

    - right (float) – The right of the near plane relative to the plane’s centre.

    - top (float) – The top of the near plane relative to the plane’s centre.

    - bottom (float) – The bottom of the near plane relative to the plane’s centre.

    - near (float) – The distance of the near plane from the camera’s origin. It is recommended that the near plane is set to 1.0 or above to avoid rendering issues at close range.

    - far (float) – The distance of the far plane from the camera’s origin.

  Return type:

    numpy.array

  Returns:

    A projection matrix representing the specified orthogonal perspective.

  See also

  http://msdn.microsoft.com/en-us/library/dd373965(v=vs.85).aspx

pyrr.matrix44.create_orthogonal_projection_matrix(left, right, bottom, top, near, far, dtype=None)

  Creates an orthogonal projection matrix.

  Parameters:

    - left (float) – The left of the near plane relative to the plane’s centre.

    - right (float) – The right of the near plane relative to the plane’s centre.

    - top (float) – The top of the near plane relative to the plane’s centre.

    - bottom (float) – The bottom of the near plane relative to the plane’s centre.

    - near (float) – The distance of the near plane from the camera’s origin. It is recommended that the near plane is set to 1.0 or above to avoid rendering issues at close range.

    - far (float) – The distance of the far plane from the camera’s origin.

  Return type:

    numpy.array

  Returns:

    A projection matrix representing the specified orthogonal perspective.

  See also

  http://msdn.microsoft.com/en-us/library/dd373965(v=vs.85).aspx

pyrr.matrix44.create_perspective_projection(fovy, aspect, near, far, dtype=None)

  Creates perspective projection matrix.

  See also

  http://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml

  See also

  http://www.geeks3d.com/20090729/howto-perspective-projection-matrix-in-opengl/

  Parameters:

    - fovy (float) – field of view in y direction in degrees

    - aspect (float) – aspect ratio of the view (width / height)

    - near (float) – distance from the viewer to the near clipping plane (only positive)

    - far (float) – distance from the viewer to the far clipping plane (only positive)

  Return type:

    numpy.array

  Returns:

    A projection matrix representing the specified perpective.

pyrr.matrix44.create_perspective_projection_from_bounds(left, right, bottom, top, near, far, dtype=None)

  Creates a perspective projection matrix using the specified near plane dimensions.

  Parameters:

    - left (float) – The left of the near plane relative to the plane’s centre.

    - right (float) – The right of the near plane relative to the plane’s centre.

    - top (float) – The top of the near plane relative to the plane’s centre.

    - bottom (float) – The bottom of the near plane relative to the plane’s centre.

    - near (float) – The distance of the near plane from the camera’s origin. It is recommended that the near plane is set to 1.0 or above to avoid rendering issues at close range.

    - far (float) – The distance of the far plane from the camera’s origin.

  Return type:

    numpy.array

  Returns:

    A projection matrix representing the specified perspective.

  See also

  http://www.gamedev.net/topic/264248-building-a-projection-matrix-without-api/

  See also

  http://www.glprogramming.com/red/chapter03.html

pyrr.matrix44.create_perspective_projection_matrix(fovy, aspect, near, far, dtype=None)

  Creates perspective projection matrix.

  See also

  http://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml

  See also

  http://www.geeks3d.com/20090729/howto-perspective-projection-matrix-in-opengl/

  Parameters:

    - fovy (float) – field of view in y direction in degrees

    - aspect (float) – aspect ratio of the view (width / height)

    - near (float) – distance from the viewer to the near clipping plane (only positive)

    - far (float) – distance from the viewer to the far clipping plane (only positive)

  Return type:

    numpy.array

  Returns:

    A projection matrix representing the specified perpective.

pyrr.matrix44.create_perspective_projection_matrix_from_bounds(left, right, bottom, top, near, far, dtype=None)

  Creates a perspective projection matrix using the specified near plane dimensions.

  Parameters:

    - left (float) – The left of the near plane relative to the plane’s centre.

    - right (float) – The right of the near plane relative to the plane’s centre.

    - top (float) – The top of the near plane relative to the plane’s centre.

    - bottom (float) – The bottom of the near plane relative to the plane’s centre.

    - near (float) – The distance of the near plane from the camera’s origin. It is recommended that the near plane is set to 1.0 or above to avoid rendering issues at close range.

    - far (float) – The distance of the far plane from the camera’s origin.

  Return type:

    numpy.array

  Returns:

    A projection matrix representing the specified perspective.

  See also

  http://www.gamedev.net/topic/264248-building-a-projection-matrix-without-api/

  See also

  http://www.glprogramming.com/red/chapter03.html

pyrr.matrix44.decompose(m)

  Decomposes an affine transformation matrix into its scale, rotation and translation components.

  Parameters:

    m (numpy.array) – A matrix.

  Returns:

    tuple (scale, rotation, translation) numpy.array scale vector3 numpy.array rotation quaternion numpy.array translation vector3

pyrr.matrix44.inverse(m)

  Returns the inverse of the matrix.

  This is essentially a wrapper around numpy.linalg.inv.

  Parameters:

    m (numpy.array) – A matrix.

  Return type:

    numpy.array

  Returns:

    The inverse of the specified matrix.

  See also

  http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html

pyrr.matrix44.multiply(m1, m2)

  Multiply two matricies, m1 . m2.

  This is essentially a wrapper around numpy.dot(m1, m2)

  Parameters:

    - m1 (numpy.array) – The first matrix. Can be a list of matrices.

    - m2 (numpy.array) – The second matrix. Can be a list of matrices.

  Return type:

    numpy.array

  Returns:

    A matrix that results from multiplying m1 by m2.