1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 #ifndef MATRIX_H 15 #define MATRIX_H 16 17 class Matrix { 18 public: 19 static const int MATRIX_SIZE = 16; 20 float mData[MATRIX_SIZE]; 21 Matrix(); 22 Matrix(const Matrix& src); 23 // Returns true if the two matrices have the same values. 24 bool equals(const Matrix& src); 25 // Loads this matrix with the identity matrix. 26 void identity(); 27 // Loads this matrix with the data from src. 28 void loadWith(const Matrix& src); 29 // Translates this matrix by the given amounts. 30 void translate(float x, float y, float z); 31 // Scales this matrix by the given amounts. 32 void scale(float x, float y, float z); 33 // Rotates this matrix the given angle. 34 void rotate(float radians, float x, float y, float z); 35 // Sets this matrix to be the result of multiplying the given matrices. 36 void multiply(const Matrix& l, const Matrix& r); 37 38 void print(const char* label); 39 40 // Returns a new matrix representing the camera. 41 static Matrix* newLookAt(float eyeX, float eyeY, float eyeZ, float centerX, 42 float centerY, float centerZ, float upX, float upY, float upZ); 43 // Returns a new matrix representing the perspective matrix. 44 static Matrix* newFrustum(float left, float right, float bottom, float top, 45 float near, float far); 46 // Returns a new matrix representing the translation. 47 static Matrix* newTranslate(float x, float y, float z); 48 // Returns a new matrix representing the scaling. 49 static Matrix* newScale(float x, float y, float z); 50 // Returns a new matrix representing the rotation. 51 static Matrix* newRotate(float radians, float x, float y, float z); 52 53 // Sets the given matrix to be the result of multiplying the given matrix by the given vector. 54 static void multiplyVector(float* result, const Matrix& lhs, 55 const float* rhs); 56 }; 57 58 #endif 59