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`

```>>> 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(self)

Retrieve the value of the current as a flat list.

New in version 1.9.1.

identity(self)

Reset the matrix to the identity matrix (inplace).

inverse(self)

Return the inverse of the matrix as a new Matrix.

look_at(self, double eyex, double eyey, double eyez, double centerx, double centery, double centerz, double upx, double upy, double upz)

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(mb, Matrix ma)

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(self)

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(self, double fovy, double aspect, double zNear, double zFar)

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(self, double objx, double objy, double objz, Matrix model, Matrix proj, double vx, double vy, double vw, double vh)

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(self, double angle, double x, double y, double z)

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(self, double x, double y, double z)

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(self, flat=None, array=None)

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(self)

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.

transform_point(self, double x, double y, double z, t=None) tuple

Transforms the point by the matrix and returns the transformed point as a `(x, y, z)` tuple. If the point is a vector `v`, the returned values is `v2 = matrix * v`.

If `t` is provided, it multiplies it with the last column of the matrix and returns the transformed `(x, y, z, t)`.

translate(self, double x, double y, double z)

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(self)

Return the transposed matrix as a new Matrix.

New in version 1.6.0.

view_clip(self, double left, double right, double bottom, double top, double near, double far, int perspective)

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.