1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Matrix implementation here is col-major, both storage-wise and 6 // operation-wise. 7 8 #ifndef MATRIXOP_H_INCLUDED 9 #define MATRIXOP_H_INCLUDED 10 11 typedef float Matrix4x4[16]; 12 typedef float Matrix3x3[9]; 13 14 // result = mat1 * mat2 15 extern void Matrix4x4_Multiply(Matrix4x4 result, 16 Matrix4x4 mat1, Matrix4x4 mat2); 17 18 // dst = src 19 extern void Matrix4x4_Copy(Matrix4x4 dst, Matrix4x4 src); 20 21 extern void Matrix4x4_LoadIdentity(Matrix4x4 mat); 22 23 // mat = ScaleMatrix(sx, sy, sz) * mat 24 extern void Matrix4x4_Scale(Matrix4x4 mat, 25 float sx, float sy, float sz); 26 27 // mat = TranslateMatrix(tx, ty, tz) * mat 28 extern void Matrix4x4_Translate(Matrix4x4 mat, 29 float tx, float ty, float tz); 30 31 // mat = RotateMatrix(angle, ax, ay, az) * mat 32 extern void Matrix4x4_Rotate(Matrix4x4 mat, float angle, 33 float ax, float ay, float az); 34 35 // mat = FrustumMatrix(left, right, bottom, top, near, far) * mat 36 extern void Matrix4x4_Frustum(Matrix4x4 mat, 37 float left, float right, 38 float bottom, float top, 39 float near, float far); 40 41 extern void Matrix4x4_Perspective(Matrix4x4 mat, float fovy, float aspect, 42 float nearZ, float farZ); 43 44 // [x,y,z] = mat(3x3) * [x,y,z] 45 extern void Matrix4x4_Transform(Matrix4x4 mat, float *x, float *y, float *z); 46 47 #endif // MATRIXOP_H_INCLUDED 48 49