Implement the arrow keys controlling the scaling

This commit is contained in:
Michael Zhang 2023-04-08 17:46:57 -05:00
parent f6e0d12287
commit d1eab0d16f
Signed by: michael
GPG key ID: BDA47A31A3C8EE6B

View file

@ -59,6 +59,10 @@ GLint window_width = 500;
GLint window_height = 500; GLint window_height = 500;
GLdouble pi = 4.0 * atan(1.0); GLdouble pi = 4.0 * atan(1.0);
// Added state
GLdouble scale_x = 1.0, scale_y = 1.0;
const GLdouble SCALE_DELTA = 0.05;
GLFWcursor *hand_cursor, *arrow_cursor; // some different cursors GLFWcursor *hand_cursor, *arrow_cursor; // some different cursors
GLint NVERTICES = 9; // part of the hard-coded model GLint NVERTICES = 9; // part of the hard-coded model
@ -74,9 +78,25 @@ static void error_callback(int error, const char *description) {
// keyboard input will be handled // keyboard input will be handled
static void key_callback(GLFWwindow *window, int key, int scancode, int action, static void key_callback(GLFWwindow *window, int key, int scancode, int action,
int mods) { int mods) {
if (key == GLFW_KEY_ESCAPE && // checks to see if the escape key was pressed
action == GLFW_PRESS) // checks to see if the escape key was pressed if ((key == GLFW_KEY_ESCAPE || key == GLFW_KEY_Q) && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE); // closes the window // closes the window
glfwSetWindowShouldClose(window, GL_TRUE);
// arrow keys control the scaling of the object
if (action == GLFW_PRESS || action == GLFW_REPEAT) {
if (key == GLFW_KEY_LEFT || key == GLFW_KEY_A)
scale_x -= SCALE_DELTA;
else if (key == GLFW_KEY_RIGHT || key == GLFW_KEY_D)
scale_x += SCALE_DELTA;
else if (key == GLFW_KEY_UP || key == GLFW_KEY_W)
scale_y += SCALE_DELTA;
else if (key == GLFW_KEY_DOWN || key == GLFW_KEY_S)
scale_y -= SCALE_DELTA;
}
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -240,9 +260,13 @@ int main(int argc, char **argv) {
// define/re-define the modelview matrix. In this template, we define M to // define/re-define the modelview matrix. In this template, we define M to
// 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.
for (i = 0; i < 16; i++) { /* for (i = 0; i < 16; i++) {
M[i] = (i % 5 == 0); M[i] = (i % 5 == 0);
} }*/
M[0] = scale_x;
M[5] = scale_y;
M[10] = 1.0;
M[15] = 1.0;
// 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)