00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MAT4_H_INCLUDED
00027 #define MAT4_H_INCLUDED
00028
00029 #include "utility.h"
00030
00031 struct kmVec3;
00032 struct kmQuaternion;
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 typedef struct kmMat4{
00044 kmScalar mat[16];
00045 } kmMat4;
00046
00047 #ifdef __cplusplus
00048 extern "C" {
00049 #endif
00050
00051
00052 kmMat4* kmMat4Fill(kmMat4* pOut, const kmScalar* pMat);
00053
00054
00055 kmMat4* kmMat4Identity(kmMat4* pOut);
00056
00057 kmMat4* kmMat4Inverse(kmMat4* pOut, const kmMat4* pM);
00058
00059
00060 int kmMat4IsIdentity(const kmMat4* pIn);
00061
00062 kmMat4* kmMat4Transpose(kmMat4* pOut, const kmMat4* pIn);
00063 kmMat4* kmMat4Multiply(kmMat4* pOut, const kmMat4* pM1, const kmMat4* pM2);
00064
00065 kmMat4* kmMat4Assign(kmMat4* pOut, const kmMat4* pIn);
00066 int kmMat4AreEqual(const kmMat4* pM1, const kmMat4* pM2);
00067
00068 kmMat4* kmMat4RotationAxis(kmMat4* pOut, const struct kmVec3* axis, kmScalar radians);
00069 kmMat4* kmMat4RotationX(kmMat4* pOut, const kmScalar radians);
00070 kmMat4* kmMat4RotationY(kmMat4* pOut, const kmScalar radians);
00071 kmMat4* kmMat4RotationZ(kmMat4* pOut, const kmScalar radians);
00072 kmMat4* kmMat4RotationPitchYawRoll(kmMat4* pOut, const kmScalar pitch, const kmScalar yaw, const kmScalar roll);
00073 kmMat4* kmMat4RotationQuaternion(kmMat4* pOut, const struct kmQuaternion* pQ);
00074 kmMat4* kmMat4Scaling(kmMat4* pOut, const kmScalar x, const kmScalar y, const kmScalar z);
00075 kmMat4* kmMat4Translation(kmMat4* pOut, const kmScalar x, const kmScalar y, const kmScalar z);
00076
00077 struct kmVec3* kmMat4GetUpVec3(struct kmVec3* pOut, const kmMat4* pIn);
00078 struct kmVec3* kmMat4GetRightVec3(struct kmVec3* pOut, const kmMat4* pIn);
00079 struct kmVec3* kmMat4GetForwardVec3(struct kmVec3* pOut, const kmMat4* pIn);
00080
00081 kmMat4* kmMat4PerspectiveProjection(kmMat4* pOut, kmScalar fovY, kmScalar aspect, kmScalar zNear, kmScalar zFar);
00082 kmMat4* kmMat4OrthographicProjection(kmMat4* pOut, kmScalar left, kmScalar right, kmScalar bottom, kmScalar top, kmScalar nearVal, kmScalar farVal);
00083 kmMat4* kmMat4LookAt(kmMat4* pOut, const struct kmVec3* pEye, const struct kmVec3* pCenter, const struct kmVec3* pUp);
00084
00085 #ifdef __cplusplus
00086 }
00087 #endif
00088 #endif