// A = B void copymatrix(float a[4][4], float b[4][4]) { int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) a[i][j] = b[i][j]; } // A = A * B // (ale nejsem si 100% jisty, mozna to je A = B * A) // (kdyby tedy rotace fungovali spatne, prohodte pri nasobeni A a B :-) void matmult(float a[4][4], float b[4][4]) { float temp[4][4]; int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) temp[i][j] = a[0][j] * b[i][0] + a[1][j] * b[i][1] + a[2][j] * b[i][2] + a[3][j] * b[i][3]; copymatrix (a, temp); } // nastavi matici na jednotkovou matici void initmatrix(float a[4][4]) { int i, j; for (j = 0; j < 4; j++) { for (i = 0; i < 4; i++) a[i][j] = 0; a[j][j] = 1; } } // vrati matici pro posun objektu void translatematrix(float matrix[4][4], float dx, float dy, float dz) { initmatrix (matrix); matrix[0][3]=dx; matrix[1][3]=dy; matrix[2][3]=dz; } //vrati matici pro rotaci objektu kolem osy x void rotatematrixx(float matrix[4][4], float xangle) { initmatrix(matrix); matrix[2][1] = sin(xangle); matrix[2][2] = cos(xangle); matrix[1][1] = cos(xangle); matrix[1][2] =-sin(xangle); } //vrati matici pro rotaci objektu kolem osy y void rotatematrixy(float matrix[4][4], float yangle) { initmatrix(matrix); matrix[2][0] =-sin(yangle); matrix[2][2] = cos(yangle); matrix[0][0] = cos(yangle); matrix[0][2] = sin(yangle); } //vrati matici pro rotaci objektu kolem osy z void rotatematrixz(float matrix[4][4], float zangle) { initmatrix(matrix); matrix[1][0] = sin(zangle); matrix[1][1] = cos(zangle); matrix[0][0] = cos(zangle); matrix[0][1] =-sin(zangle); } výheň