17 if (i==j)
a->m[i][j]=1.0;
else a->m[i][j]=0.0;
26 if (
a->m[i][j] != 1.0)
return 0;
27 }
else if (
a->m[i][j] != 0.0)
return 0;
39 for(k=0;k<4;k++) s+=
a->m[i][k]*b->
m[k][j];
58 for(k=0;k<4;k++) s+=
a.m[i][k]*b->
m[k][j];
65 memcpy(
a,b,
sizeof(
M4));
70 memcpy(
a,b,
sizeof(
V3));
76 a->X=b->
m[0][0]*c->X+b->
m[0][1]*c->Y+b->
m[0][2]*c->Z+b->
m[0][3];
77 a->Y=b->
m[1][0]*c->X+b->
m[1][1]*c->Y+b->
m[1][2]*c->Z+b->
m[1][3];
78 a->Z=b->
m[2][0]*c->X+b->
m[2][1]*c->Y+b->
m[2][2]*c->Z+b->
m[2][3];
83 a->X=b->
m[0][0]*c->X+b->
m[0][1]*c->Y+b->
m[0][2]*c->Z;
84 a->Y=b->
m[1][0]*c->X+b->
m[1][1]*c->Y+b->
m[1][2]*c->Z;
85 a->Z=b->
m[2][0]*c->X+b->
m[2][1]*c->Y+b->
m[2][2]*c->Z;
90 a->X=b->
m[0][0]*c->X+b->
m[0][1]*c->Y+b->
m[0][2]*c->Z+b->
m[0][3]*c->W;
91 a->Y=b->
m[1][0]*c->X+b->
m[1][1]*c->Y+b->
m[1][2]*c->Z+b->
m[1][3]*c->W;
92 a->Z=b->
m[2][0]*c->X+b->
m[2][1]*c->Y+b->
m[2][2]*c->Z+b->
m[2][3]*c->W;
93 a->W=b->
m[3][0]*c->X+b->
m[3][1]*c->Y+b->
m[3][2]*c->Z+b->
m[3][3]*c->W;
99 a->m[0][0]=b->
m[0][0];
100 a->m[0][1]=b->
m[1][0];
101 a->m[0][2]=b->
m[2][0];
102 a->m[0][3]=b->
m[3][0];
104 a->m[1][0]=b->
m[0][1];
105 a->m[1][1]=b->
m[1][1];
106 a->m[1][2]=b->
m[2][1];
107 a->m[1][3]=b->
m[3][1];
109 a->m[2][0]=b->
m[0][2];
110 a->m[2][1]=b->
m[1][2];
111 a->m[2][2]=b->
m[2][2];
112 a->m[2][3]=b->
m[3][2];
114 a->m[3][0]=b->
m[0][3];
115 a->m[3][1]=b->
m[1][3];
116 a->m[3][2]=b->
m[2][3];
117 a->m[3][3]=b->
m[3][3];
126 for(j=0;j<3;j++)
a->m[i][j]=b.
m[j][i];
127 a->m[3][0]=0.0;
a->m[3][1]=0.0;
a->m[3][2]=0.0;
a->m[3][3]=1.0;
130 for(j=0;j<3;j++) s-=b.
m[j][i]*b.
m[j][3];
144 for(i=0;i<n*n;i++) r[i]=0;
145 for(i=0;i<n;i++) r[i*n+i]=1;
153 if (fabs(m[i*n+j])>fabs(max)) {
159 if (max==0)
return 1;
183 for(l=0;l<n;l++)
if (l!=j) {
186 m[l*n+i]-=m[j*n+i]*t;
187 r[l*n+i]-=r[j*n+i]*t;
201 memcpy(&
tmp, b, 16*
sizeof(
float));
215 a->m[v][v]=c;
a->m[v][w]=-s;
216 a->m[w][v]=s;
a->m[w][w]=c;
225 det = m->
m[0][0]*m->
m[1][1]*m->
m[2][2]-m->
m[0][0]*m->
m[1][2]*m->
m[2][1]-
226 m->
m[1][0]*m->
m[0][1]*m->
m[2][2]+m->
m[1][0]*m->
m[0][2]*m->
m[2][1]+
227 m->
m[2][0]*m->
m[0][1]*m->
m[1][2]-m->
m[2][0]*m->
m[0][2]*m->
m[1][1];
229 a->m[0][0] = (m->
m[1][1]*m->
m[2][2]-m->
m[1][2]*m->
m[2][1])/det;
230 a->m[0][1] = -(m->
m[0][1]*m->
m[2][2]-m->
m[0][2]*m->
m[2][1])/det;
231 a->m[0][2] = -(-m->
m[0][1]*m->
m[1][2]+m->
m[0][2]*m->
m[1][1])/det;
233 a->m[1][0] = -(m->
m[1][0]*m->
m[2][2]-m->
m[1][2]*m->
m[2][0])/det;
234 a->m[1][1] = (m->
m[0][0]*m->
m[2][2]-m->
m[0][2]*m->
m[2][0])/det;
235 a->m[1][2] = -(m->
m[0][0]*m->
m[1][2]-m->
m[0][2]*m->
m[1][0])/det;
237 a->m[2][0] = (m->
m[1][0]*m->
m[2][1]-m->
m[1][1]*m->
m[2][0])/det;
238 a->m[2][1] = -(m->
m[0][0]*m->
m[2][1]-m->
m[0][1]*m->
m[2][0])/det;
239 a->m[2][2] = (m->
m[0][0]*m->
m[1][1]-m->
m[0][1]*m->
m[1][0])/det;
248 n=sqrt(
a->X*
a->X+
a->Y*
a->Y+
a->Z*
a->Z);
void gl_M4_Transpose(M4 *a, M4 *b)
void gl_M4_MulV4(V4 *a, M4 *b, V4 *c)
void gl_M4_Rotate(M4 *a, float t, int u)
void gl_M4_MulLeft(M4 *c, M4 *b)
void gl_MulM3V3(V3 *a, M4 *b, V3 *c)
void gl_MoveV3(V3 *a, V3 *b)
void gl_M4_Inv(M4 *a, M4 *b)
V3 gl_V3_New(float x, float y, float z)
void gl_M4_Move(M4 *a, M4 *b)
int Matrix_Inv(float *r, float *m, int n)
void gl_M4_Mul(M4 *c, M4 *a, M4 *b)
void gl_MulM4V3(V3 *a, M4 *b, V3 *c)
void gl_M3_Inv(M3 *a, M3 *m)
V4 gl_V4_New(float x, float y, float z, float w)
void gl_M4_InvOrtho(M4 *a, M4 b)