void calc::multiply(float out[4][4],float m1[4][4],float m2[4][4])
{
out[0][0]=m1[0][0]*m2[0][0]+m1[0][1]*m2[1][0]+m1[0][2]*m2[2][0]+m1[0][3]*m2[3][0];
out[0][1]=m1[0][0]*m2[0][1]+m1[0][1]*m2[1][1]+m1[0][2]*m2[2][1]+m1[0][3]*m2[3][1];
out[0][2]=m1[0][0]*m2[0][2]+m1[0][1]*m2[1][2]+m1[0][2]*m2[2][2]+m1[0][3]*m2[3][2];
out[0][3]=m1[0][0]*m2[0][3]+m1[0][1]*m2[1][3]+m1[0][2]*m2[2][3]+m1[0][3]*m2[3][3];
out[1][0]=m1[1][0]*m2[0][0]+m1[1][1]*m2[1][0]+m1[1][2]*m2[2][0]+m1[1][3]*m2[3][0];
out[1][1]=m1[1][0]*m2[0][1]+m1[1][1]*m2[1][1]+m1[1][2]*m2[2][1]+m1[1][3]*m2[3][1];
out[1][2]=m1[1][0]*m2[0][2]+m1[1][1]*m2[1][2]+m1[1][2]*m2[2][2]+m1[1][3]*m2[3][2];
out[1][3]=m1[1][0]*m2[0][3]+m1[1][1]*m2[1][3]+m1[1][2]*m2[2][3]+m1[1][3]*m2[3][3];
out[2][0]=m1[2][0]*m2[0][0]+m1[2][1]*m2[1][0]+m1[2][2]*m2[2][0]+m1[2][3]*m2[3][0];
out[2][1]=m1[2][0]*m2[0][1]+m1[2][1]*m2[1][1]+m1[2][2]*m2[2][1]+m1[2][3]*m2[3][1];
out[2][2]=m1[2][0]*m2[0][2]+m1[2][1]*m2[1][2]+m1[2][2]*m2[2][2]+m1[2][3]*m2[3][2];
out[2][3]=m1[2][0]*m2[0][3]+m1[2][1]*m2[1][3]+m1[2][2]*m2[2][3]+m1[2][3]*m2[3][3];
out[3][0]=m1[3][0]*m2[0][0]+m1[3][1]*m2[1][0]+m1[3][2]*m2[2][0]+m1[3][3]*m2[3][0];
out[3][1]=m1[3][0]*m2[0][1]+m1[3][1]*m2[1][1]+m1[3][2]*m2[2][1]+m1[3][3]*m2[3][1];
out[3][2]=m1[3][0]*m2[0][2]+m1[3][1]*m2[1][2]+m1[3][2]*m2[2][2]+m1[3][3]*m2[3][2];
out[3][3]=m1[3][0]*m2[0][3]+m1[3][1]*m2[1][3]+m1[3][2]*m2[2][3]+m1[3][3]*m2[3][3];
}
for instance i did:
calc::multiplyMatrices(matrixOut,matrixIn1,matrixIn2);
calc::invertMatrix(matrix);
calc::multiplyVector(matrix,vector);
Now that I rewrote everything with classes:
class C3Vector
{
public:
C3Vector();
...
float& operator() (unsigned i);
const float& operator() (unsigned i) const;
...
C3Vector operator/ (float d);
C3Vector operator* (float d);
C3Vector operator+ (const C3Vector& v);
C3Vector operator- (const C3Vector& v);
C3Vector operator^ (const C3Vector& v);
float operator* (const C3Vector& v);
void operator= (const C3Vector& v);
float data[3];
};
class C3X3Matrix
{
public:
C3X3Matrix();
...
C3X3Matrix getTranspose();
float& operator() (unsigned i,unsigned j);
const float& operator() (unsigned i,unsigned j) const;
C3X3Matrix operator* (const C3X3Matrix& m);
C3X3Matrix operator+ (const C3X3Matrix& m);
C3X3Matrix operator* (const float f);
C3Vector operator* (const C3Vector& v);
void operator= (const C3X3Matrix& m);
C3Vector axis[3];
};
class C4X4Matrix
{
public:
C4X4Matrix();
...
C4X4Matrix getInverse();
...
C4X4Matrix operator* (const C4X4Matrix& m);
C4X4Matrix operator+ (const C4X4Matrix& m);
C3Vector operator* (const C3Vector& v);
void operator= (const C4X4Matrix& m);
C3X3Matrix M;
C3Vector X;
};
same operations as before:
matrixOut=matrixIn1*matrixIn2;
matrix=matrix.getInvert();
vector=matrix*vector;
What went wrong? How come everything is soooo slowed down now.
Thanks for your help