106 lines
2.5 KiB
C
106 lines
2.5 KiB
C
#ifndef MATRIX_MATH
|
|
#define MATRIX_MATH
|
|
|
|
#include <GL/glew.h>
|
|
|
|
typedef struct {
|
|
GLfloat x;
|
|
GLfloat y;
|
|
GLfloat z;
|
|
} vec3;
|
|
|
|
typedef struct {
|
|
GLfloat x;
|
|
GLfloat y;
|
|
GLfloat z;
|
|
GLfloat w;
|
|
} vec4;
|
|
|
|
typedef struct {
|
|
GLfloat x;
|
|
GLfloat y;
|
|
} vec2;
|
|
|
|
typedef struct {
|
|
GLfloat m00;
|
|
GLfloat m10;
|
|
GLfloat m20;
|
|
GLfloat m30;
|
|
|
|
GLfloat m01;
|
|
GLfloat m11;
|
|
GLfloat m21;
|
|
GLfloat m31;
|
|
|
|
GLfloat m02;
|
|
GLfloat m12;
|
|
GLfloat m22;
|
|
GLfloat m32;
|
|
|
|
GLfloat m03;
|
|
GLfloat m13;
|
|
GLfloat m23;
|
|
GLfloat m33;
|
|
} mat4;
|
|
|
|
typedef struct {
|
|
GLfloat m00;
|
|
GLfloat m10;
|
|
GLfloat m20;
|
|
|
|
GLfloat m01;
|
|
GLfloat m11;
|
|
GLfloat m21;
|
|
|
|
GLfloat m02;
|
|
GLfloat m12;
|
|
GLfloat m22;
|
|
} mat3;
|
|
|
|
extern void vec3Zero(vec3* out);
|
|
extern void vec3Add(vec3* out, vec3* a, vec3* b);
|
|
extern void vec3Multiply(vec3* out, vec3* a, GLfloat x);
|
|
extern void vec3Subtract(vec3* out, vec3* a, vec3* b);
|
|
extern void vec3Cross(vec3* out, vec3* a, vec3* b);
|
|
extern void vec3Normalise(vec3* out, vec3* a);
|
|
extern GLfloat vec3Length(vec3* a);
|
|
extern GLfloat vec3Dot(vec3* a, vec3* b);
|
|
|
|
extern void identity(mat4* out);
|
|
extern void translation(mat4* out, vec3* v);
|
|
extern void scaling(mat4* out, vec3* v);
|
|
extern void rotationZ(mat4* out, GLfloat angle);
|
|
extern void rotationY(mat4* out, GLfloat angle);
|
|
extern void rotationX(mat4* out, GLfloat angle);
|
|
|
|
extern void multiplyAny(GLfloat* out, GLfloat* A, GLfloat* B, int wA, int hA, int wB);
|
|
extern void multiply(mat4* out, mat4* A, mat4* B);
|
|
|
|
extern void translate(mat4* out, mat4* in, vec3* v);
|
|
extern void scale(mat4* out, mat4* in, vec3* v);
|
|
extern void rotateZ(mat4* out, mat4* in, GLfloat angle);
|
|
extern void rotateY(mat4* out, mat4* in, GLfloat angle);
|
|
extern void rotateX(mat4* out, mat4* in, GLfloat angle);
|
|
|
|
extern void transposeAny(GLfloat* out, GLfloat* in, int w, int h);
|
|
extern void transpose(mat4* out, mat4* in);
|
|
|
|
extern void printAny(GLfloat* M, int w, int h);
|
|
extern void vec3Print(vec3* a);
|
|
extern void mat4Print(mat4* m);
|
|
extern void mat3Print(mat3* m);
|
|
|
|
extern void mat3From4(mat3* out, mat4* in);
|
|
extern void mat3MultiplyScalar(mat3* out, mat3* in, GLfloat x);
|
|
extern GLfloat mat3Determinant(mat3* m);
|
|
extern void mat3Transpose(mat3* out, mat3* in);
|
|
extern void mat3Minor(mat3* out, mat3* in);
|
|
extern void mat3Cofactor(mat3* out, mat3* in);
|
|
extern void mat3Adjoint(mat3* out, mat3* in);
|
|
extern void mat3Inverse(mat3* out, mat3* in);
|
|
|
|
extern GLfloat sumDiffAny(GLfloat* A, GLfloat* B, int w, int h);
|
|
extern GLfloat mat3SumDiff(mat3* A, mat3* B);
|
|
|
|
extern void vec2Subtract(vec2* out, vec2* a, vec2* b);
|
|
#endif |