OpenGL ES SDK for Android ARM Developer Center
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Matrix.h
Go to the documentation of this file.
1 /* Copyright (c) 2014-2017, ARM Limited and Contributors
2  *
3  * SPDX-License-Identifier: MIT
4  *
5  * Permission is hereby granted, free of charge,
6  * to any person obtaining a copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
14  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19  */
20 
21 #ifndef MATRIX_H
22 #define MATRIX_H
23 
24 #include "VectorTypes.h"
25 
26 namespace MaliSDK
27 {
31  class Matrix
32  {
33  private:
38  float elements[16];
39 
49  static Matrix multiply(Matrix *left, Matrix *right);
50 
54  static const float biasArray[];
55 
59  static const float identityArray[];
60  public:
64  Matrix(void);
65 
73  float& operator[] (unsigned element);
74 
82  Matrix operator* (Matrix right);
83 
87  Matrix& operator=(const Matrix &another);
88 
94  Matrix(const float* array);
95 
103 
109  static Matrix identityMatrix;
110 
118  static Matrix createRotationX(float angleInDegrees);
119 
127  static Matrix createRotationY(float angleInDegrees);
128 
136  static Matrix createRotationZ(float angleInDegrees);
137 
147  static Matrix createScaling(float x, float y, float z);
148 
158  static Matrix createTranslation(float x, float y, float z);
159 
165  float* getAsArray(void);
166 
174  static float matrixDeterminant(float *matrix);
175 
183  static float matrixDeterminant(Matrix *matrix);
184 
192  static Matrix matrixInvert(Matrix *matrix);
193 
203  static Matrix matrixLookAt(Vec3f eye, Vec3f center, Vec3f up);
204 
218  static Matrix matrixOrthographic(float left, float right, float bottom, float top, float zNear, float zFar);
219 
231  static Matrix matrixPerspective(float FOV, float ratio, float zNear, float zFar);
232 
241  static Matrix matrixScale(Matrix *matrix, float scale);
242 
248  static void matrixTranspose(Matrix *matrix);
249 
258  static Vec4f vertexTransform(Vec4f *vector, Matrix *matrix);
259  };
260 }
261 #endif /* MATRIX_H */
float & operator[](unsigned element)
Array operator for accessing the elements of the matrix.
Definition: Matrix.cpp:53
Matrix operator*(Matrix right)
Multiply operator to post multiply a matrix by another.
Definition: Matrix.cpp:63
static Matrix identityMatrix
The identity matrix.
Definition: Matrix.h:90
Functions for manipulating matrices.
Definition: Matrix.h:31
Matrix(void)
Default constructor.
Definition: Matrix.cpp:49
static const float identityArray[]
A 4x4 identity Matrix;.
Definition: Matrix.h:50
static Matrix matrixInvert(Matrix *matrix)
Get the inverse of a matrix.
Definition: Matrix.cpp:155
static Matrix createTranslation(float x, float y, float z)
Create and return a translation matrix.
Definition: Matrix.cpp:414
static Matrix matrixOrthographic(float left, float right, float bottom, float top, float zNear, float zFar)
Create and return an orthographic projection matrix.
Definition: Matrix.cpp:483
static Matrix createScaling(float x, float y, float z)
Create and return a scaling matrix.
Definition: Matrix.cpp:403
static const float biasArray[]
A 4x4 bias Matrix;.
Definition: Matrix.h:54
static Matrix matrixLookAt(Vec3f eye, Vec3f center, Vec3f up)
Create and return a look at matrix.
Definition: Matrix.cpp:431
static Matrix matrixPerspective(float FOV, float ratio, float zNear, float zFar)
Create and return a perspective projection matrix.
Definition: Matrix.cpp:425
static Matrix biasMatrix
The bias matrix.
Definition: Matrix.h:102
float * getAsArray(void)
Get the matrix elements as a column major order array.
Definition: Matrix.cpp:78
A 3D floating point vector.
Definition: VectorTypes.h:83
static Vec4f vertexTransform(Vec4f *vector, Matrix *matrix)
Transform a 4D vertex by a matrix.
Definition: Matrix.cpp:559
Matrix scale
Definition: RotoZoom.cpp:64
static Matrix createRotationY(float angle)
Create and return a rotation matrix around the y-axis matrix.
Definition: Matrix.cpp:511
static Matrix createRotationZ(float angle)
Create and return a rotation matrix around the z-axis matrix.
Definition: Matrix.cpp:523
static float matrixDeterminant(float *matrix)
Calculate determinant of supplied 3x3 matrix.
Definition: Matrix.cpp:83
static void matrixTranspose(Matrix *matrix)
Transpose a matrix in-place.
Definition: Matrix.cpp:374
GLint GLint GLint GLint GLint x
Definition: gl2ext.h:574
static Matrix multiply(Matrix *left, Matrix *right)
Multiply 2 matrices to return a third.
Definition: Matrix.cpp:535
Matrix & operator=(const Matrix &another)
Overloading assingment operater to do deep copy of the Matrix elements.
Definition: Matrix.cpp:68
GLint left
Definition: gl2ext.h:2704
float elements[16]
A 16 element floating point array used to represent a 4x4 matrix.
Definition: Matrix.h:38
A 4D floating point vector.
Definition: VectorTypes.h:127
static Matrix createRotationX(float angle)
Create and return a rotation matrix around the x-axis matrix.
Definition: Matrix.cpp:499
GLint y
Definition: gl2ext.h:179
static Matrix matrixScale(Matrix *matrix, float scale)
Scale each element in a matrix by a constant.
Definition: Matrix.cpp:362
GLint GLint bottom
Definition: gl2ext.h:2704