91. opengl.matrix — opengl/matrix.py

Python OpenGL framework for pyFormex

91.1. Classes defined in module opengl.matrix

class opengl.matrix.Vector4[source]

A set of homogeneous coordinates

The input can be 3D or 4D coordinates. The results is always a 2-dimensional array: a single point has nrows=1.

Examples

>>> Vector4([1, 2, 3])
Vector4([[ 1.,  2.,  3.,  1.]])
>>> Vector4([[1, 2, 3],[4, 5, 6]])
Vector4([[ 1.,  2.,  3.,  1.],
         [ 4.,  5.,  6.,  1.]])
>>> Vector4([[1, 2, 3, 0], [4., 5., 6., 1.]])
Vector4([[ 1.,  2.,  3.,  0.],
         [ 4.,  5.,  6.,  1.]])
>>> Vector4([[1,2,3]]).dtype
dtype('float32')
class opengl.matrix.Matrix4[source]

A 4x4 transformation matrix for homogeneous coordinates.

The matrix is to be used with post-multiplication on row vectors (i.e. OpenGL convention).

Parameters:data (array_like (4,4), optional) – If specified, should be a (4,4) float array or compatible. Else a 4x4 identity matrix is created.

Examples

>>> I = Matrix4()
>>> print(I)
[[ 1.  0.  0.  0.]
 [ 0.  1.  0.  0.]
 [ 0.  0.  1.  0.]
 [ 0.  0.  0.  1.]]

We can first scale and then rotate, or first rotate and then scale (with another scaling factor):

>>> a = I.scale([4.,4.,4.]).rotate(45.,[0.,0.,1.])
>>> b = I.rotate(45.,[0.,0.,1.]).scale([2.,2.,2.])
>>> a
Matrix4([[ 0.,  4.,  0.,  0.],
         [-4.,  0.,  0.,  0.],
         [ 0.,  0.,  8.,  0.],
         [ 0.,  0.,  0.,  1.]])
>>> (a==b).all()
True
gl()[source]

Get the transformation matrix as a ‘ready-to-use’-gl version.

Returns the (4,4) Matrix as a rowwise flattened array of type float32.

Example:

>>> Matrix4().gl()
Matrix4([ 1.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,
         0.,  0.,  1.])
identity()[source]

Reset the matrix to a 4x4 identity matrix.

translate(vector)[source]

Translate a 4x4 matrix by a (3,) vector.

  • vector: (3,) float array: the translation vector

Changes the Matrix in place and also returns the result

Example:

>>> Matrix4().translate([1.,2.,3.])
Matrix4([[ 1.,  0.,  0.,  0.],
         [ 0.,  1.,  0.,  0.],
         [ 0.,  0.,  1.,  0.],
         [ 1.,  2.,  3.,  1.]])
rotate(angle, axis=None)[source]

Rotate a Matrix4.

The rotation can be specified by

  • an angle and axis,
  • a 3x3 rotation matrix,
  • a 4x4 trtransformation matrix (Matrix4).

Parameters:

  • angle: float: the rotation angle. A 3x3 or 4x4 matrix may be
    give instead, to directly specify the roation matrix.
  • axis: int or (3,) float: the axis to rotate around

Changes the Matrix in place and also returns the result.

Example:

>>> Matrix4().rotate(90.,[0.,1.,0.])
Matrix4([[ 0.,  0., -1.,  0.],
         [ 0.,  1.,  0.,  0.],
         [ 1.,  0.,  0.,  0.],
         [ 0.,  0.,  0.,  1.]])
scale(vector)[source]

Scale a 4x4 matrix by a (3,) vector.

  • vector: (3,) float array: the scaling vector

Changes the Matrix in place and also returns the result

Example:

>>> Matrix4().scale([1.,2.,3.])
Matrix4([[ 1.,  0.,  0.,  0.],
         [ 0.,  2.,  0.,  0.],
         [ 0.,  0.,  3.,  0.],
         [ 0.,  0.,  0.,  1.]])
swapRows(row1, row2)[source]

Swap two rows.

  • row1, row2: index of the rows to swap
swapCols(col1, col2)[source]

Swap two columns.

  • col1, col2: index of the columns to swap
inverse()[source]

Return the inverse matrix

transform(x)[source]

Transform a vertex using this matrix.

  • x: a (3,) or (4,) vector.

If the vector has length 4, it holds homogeneous coordinates, and the result is the dot product of the vector with the Matrix: x * M. If the vector has length 3, the 4th homogeneous coordinate is assumed to be 1, and the product is computed in an optimized way.

invtransform(x)[source]

Transform a vertex with the inverse of this matrix.

  • x: a (3,) or (4,) vector.
transinv()[source]

Return the transpose of the inverse.

91.2. Functions defined in module opengl.matrix