# Transformation¶

This module contains a Matrix class used for our Graphics calculations. We currently support:

• rotation, translation and scaling matrices
• multiplication matrix
• clip matrix (with or without perspective)
• transformation matrix for 3d touch

class kivy.graphics.transformation.Matrix

Bases: builtins.object

Optimized matrix class for OpenGL:

>>> from kivy.graphics.transformation import Matrix
>>> m = Matrix()
>>> print(m)
[[ 1.000000 0.000000 0.000000 0.000000 ]
[ 0.000000 1.000000 0.000000 0.000000 ]
[ 0.000000 0.000000 1.000000 0.000000 ]
[ 0.000000 0.000000 0.000000 1.000000 ]]

[ 0   1   2   3]
[ 4   5   6   7]
[ 8   9  10  11]
[ 12  13  14  15]

get()

Retrieve the value of the current as a flat list.

New in version 1.9.1.

identity()

Reset the matrix to the identity matrix (inplace).

inverse()

Return the inverse of the matrix as a new Matrix.

look_at()

Returns a new lookat Matrix (similar to gluLookAt).

Parameters: eyex: float Eyes X co-ordinate eyey: float Eyes Y co-ordinate eyez: float Eyes Z co-ordinate centerx: float The X position of the reference point centery: float The Y position of the reference point centerz: float The Z position of the reference point upx: float The X value up vector. upy: float The Y value up vector. upz: float The Z value up vector.

New in version 1.6.0.

multiply()

Multiply the given matrix with self (from the left) i.e. we premultiply the given matrix by the current matrix and return the result (not inplace):

m.multiply(n) -> n * m

Parameters: ma: Matrix The matrix to multiply by
normal_matrix()

Computes the normal matrix, which is the inverse transpose of the top left 3x3 modelview matrix used to transform normals into eye/camera space.

New in version 1.6.0.

perspective()

Creates a perspective matrix (inplace).

Parameters: fovy: float “Field Of View” angle aspect: float Aspect ratio zNear: float Near clipping plane zFar: float Far clippin plane

New in version 1.6.0.

project()

Project a point from 3d space into a 2d viewport.

Parameters: objx: float Points X co-ordinate objy: float Points Y co-ordinate objz: float Points Z co-ordinate model: Matrix The model matrix proj: Matrix The projection matrix vx: float Viewports X co-ordinate vy: float Viewports y co-ordinate vw: float Viewports width vh: float Viewports height

New in version 1.7.0.

rotate()

Rotate the matrix through the angle around the axis (x, y, z) (inplace).

Parameters: angle: float The angle through which to rotate the matrix x: float X position of the point y: float Y position of the point z: float Z position of the point
scale()

Scale the current matrix by the specified factors over each dimension (inplace).

Parameters: x: float The scale factor along the X axis y: float The scale factor along the Y axis z: float The scale factor along the Z axis
set()

Insert custom values into the matrix in a flat list format or 4x4 array format like below:

m.set(array=[
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]]
)


New in version 1.9.0.

tolist()

Retrieve the value of the current matrix in numpy format. for example m.tolist() will return:

[[1.000000, 0.000000, 0.000000, 0.000000],
[0.000000, 1.000000, 0.000000, 0.000000],
[0.000000, 0.000000, 1.000000, 0.000000],
[0.000000, 0.000000, 0.000000, 1.000000]]


you can use this format to plug the result straight into numpy in this way numpy.array(m.tolist())

New in version 1.9.0.

translate()

Translate the matrix.

Parameters: x: float The translation factor along the X axis y: float The translation factor along the Y axis z: float The translation factor along the Z axis
transpose()

Return the transposed matrix as a new Matrix.

New in version 1.6.0.

view_clip()

Create a clip matrix (inplace).

Parameters: left: float Co-ordinate right: float Co-ordinate bottom: float Co-ordinate top: float Co-ordinate near: float Co-ordinate far: float Co-ordinate perpective: int Co-ordinate

Changed in version 1.6.0: Enable support for perspective parameter.