• ### Announcements

#### Archived

This topic is now archived and is closed to further replies.

## Recommended Posts

gameovercl    122
Hi there! I have to multiply two 4x4 matrices stored as an 1D array of 16 floats. I know that OpenGL has functions to multiply matrices, but I would like to see some code to do this task... So, if you know how to do it, please post the code here By the way... remember that OpenGL uses column-major matrices (anyway, I''m using an array such as GLfloat matrix[16]; ) Thanks in advance! Cristián Ramírez (gameovercl) ICQ #38991565 Viña del Mar CHILE

##### Share on other sites
Ben_    122
Hello,

it was just a quick think, but it should be right.
If you use a column major Matrix use:
int i,j,k;GLfloat[16] m1, m2; // the matrices to multiplyGLfloat[16] resultMatrix={0} // initialize everything with 0for (i=0; i<4;++1)  for (j=0; j<16; j+=4)    for (k=0; k<4; ++k)      resultMatrix[i+j] += m1[i+k*4]*m2[j+k];

It is easy to generalize it to any matrix multiplication.
Remember that this is not optimized (e.g. <<2 would be faster as *4 but that should be recognized by the compiler). So whenever possible use the prebuild OpenGL functions, or matrics multiplication of optimized math libs.

Greetings Ben

##### Share on other sites
zedzeek    528
have a search for the ''matrice + quaternion faq'' lots of good stuff there

##### Share on other sites
Dragonus    122
I won''t implement it code-wise, but it''s easier to see it this way.

Say you have two matrices of size n-by-n, as such:

  [A(1,1) A(1,2) ... A(1,n)] [B(1,1) B(1,2) ... B(1,n)][A(2,1) A(2,2) ... A(2,n)] * [B(2,1) B(2,2) ... B(2,n)][ ... ... ... ... ] [ ... ... ... ... ][A(n,1) A(n,2) ... A(n,n)] [B(n,1) B(n,2) ... B(n,n)]

The product of these two matrices will also be an n-by-n matrix (let''s call it R) where the value the value each cell (i,j) (for i and j integers between 1 and n) is given by the following property:

R(i,j) = A(i,1)*B(1,j) + A(i,2)*B(2,j) + A(i,3)*B(3,j) + ... + A(i,n)*B(n,j)

If you know anything about dot products of vectors, it''s just like calculating the dot product of A''s ith row and B''s jth column.

Now granted, I used double-indeces on mine and didn''t use the number 0 for ease of use. So yours will look something like Ben''s up yonder. However, this is the theory behind the code.

~ Dragonus