#ifndef CORE_MATRIX_H #define CORE_MATRIX_H #include "core/Quaternion.h" #include "core/Vector.h" typedef struct { CoreVector4 data[4]; } CoreMatrix; #define CORE_ZERO_MATRIX ((CoreMatrix){0}) #define CORE_UNIT_MATRIX \ ((CoreMatrix){ \ {{{1, 0, 0, 0}}, {{0, 1, 0, 0}}, {{0, 0, 1, 0}}, {{0, 0, 0, 1}}}}) CoreMatrix* coreTransposeMatrix(CoreMatrix* m); CoreMatrix* coreMulSetMatrix(CoreMatrix* m, const CoreMatrix* a); CoreMatrix* coreMulMatrix(CoreMatrix* m, const CoreMatrix* a, const CoreMatrix* b); CoreVector3* coreMulMatrixV3(CoreVector3* v, const CoreMatrix* m, const CoreVector3* a); CoreMatrix* coreScaleMatrix(CoreMatrix* m, const CoreVector3* v); CoreMatrix* coreScaleMatrixF(CoreMatrix* m, float f); CoreMatrix* coreTranslateMatrix(CoreMatrix* m, const CoreVector3* v); CoreMatrix* coreTranslateMatrixX(CoreMatrix* m, float tx); CoreMatrix* coreTranslateMatrixY(CoreMatrix* m, float ty); CoreMatrix* coreTranslateMatrixZ(CoreMatrix* m, float tz); CoreMatrix* coreTranslateMatrixTo(CoreMatrix* m, const CoreVector3* v); CoreMatrix* coreRotateMatrixX(CoreMatrix* m, float degrees); CoreMatrix* coreRotateMatrixY(CoreMatrix* m, float degrees); CoreMatrix* coreRotateMatrixZ(CoreMatrix* m, float degrees); CoreMatrix* coreRotateMatrix(CoreMatrix* m, const CoreQuaternion* q); size_t coreToStringMatrix(const CoreMatrix* m, char* buffer, size_t n); #endif