fix matrix multiply problem
This commit is contained in:
parent
0212326d0a
commit
ce9d7942cf
1 changed files with 20 additions and 18 deletions
|
@ -117,6 +117,12 @@ key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) {
|
||||||
|
|
||||||
else if (key == GLFW_KEY_DOWN || key == GLFW_KEY_S)
|
else if (key == GLFW_KEY_DOWN || key == GLFW_KEY_S)
|
||||||
scale_y -= SCALE_DELTA;
|
scale_y -= SCALE_DELTA;
|
||||||
|
|
||||||
|
if (scale_x <= 0)
|
||||||
|
scale_x = SCALE_DELTA;
|
||||||
|
|
||||||
|
if (scale_y <= 0)
|
||||||
|
scale_y = SCALE_DELTA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -298,7 +304,8 @@ int main(int argc, char **argv) {
|
||||||
// be the identity matrix; you will need define M according to the user's
|
// be the identity matrix; you will need define M according to the user's
|
||||||
// actions.
|
// actions.
|
||||||
|
|
||||||
slow4x4MatrixMultiplyIntoColumnOrder(rotation_matrix, scale_matrix, M);
|
slow4x4MatrixMultiplyAllRowOrder(rotation_matrix, scale_matrix, M);
|
||||||
|
transposeMatrix(M);
|
||||||
|
|
||||||
// sanity check that your matrix contents are what you expect them to be
|
// sanity check that your matrix contents are what you expect them to be
|
||||||
if (DEBUG_ON) {
|
if (DEBUG_ON) {
|
||||||
|
@ -346,7 +353,15 @@ void printMatrix(string name, GLfloat *matrix) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void transposeMatrix(GLfloat *matrix) {}
|
void transposeMatrix(GLfloat *matrix) {
|
||||||
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
for (int j = i + 1; j < 4; ++j) {
|
||||||
|
GLfloat tmp = matrix[i * 4 + j];
|
||||||
|
matrix[i * 4 + j] = matrix[j * 4 + i];
|
||||||
|
matrix[j * 4 + i] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void zeroInitGlfloats(GLfloat *arr, uint32_t len) {
|
void zeroInitGlfloats(GLfloat *arr, uint32_t len) {
|
||||||
for (auto i = 0; i < len; ++i) {
|
for (auto i = 0; i < len; ++i) {
|
||||||
|
@ -354,29 +369,16 @@ void zeroInitGlfloats(GLfloat *arr, uint32_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void slow4x4MatrixMultiplyIntoColumnOrder(
|
|
||||||
GLfloat *left, GLfloat *right, GLfloat *result
|
|
||||||
) {
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
|
||||||
for (int j = 0; j < 4; ++j) {
|
|
||||||
for (int k = 0; k < 4; ++k) {
|
|
||||||
const GLfloat leftVal = left[i * 4 + k];
|
|
||||||
const GLfloat rightVal = right[j * 4 + k];
|
|
||||||
result[j * 4 + i] += leftVal * rightVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void slow4x4MatrixMultiplyAllRowOrder(
|
void slow4x4MatrixMultiplyAllRowOrder(
|
||||||
GLfloat *left, GLfloat *right, GLfloat *result
|
GLfloat *left, GLfloat *right, GLfloat *result
|
||||||
) {
|
) {
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
for (int j = 0; j < 4; ++j) {
|
for (int j = 0; j < 4; ++j) {
|
||||||
|
result[i * 4 + j] = 0;
|
||||||
for (int k = 0; k < 4; ++k) {
|
for (int k = 0; k < 4; ++k) {
|
||||||
const GLfloat leftVal = left[i * 4 + k];
|
const GLfloat leftVal = left[i * 4 + k];
|
||||||
const GLfloat rightVal = right[j * 4 + k];
|
const GLfloat rightVal = right[k + j * 4];
|
||||||
result[j * 4 + i] += leftVal * rightVal;
|
result[i * 4 + j] += leftVal * rightVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue