static void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) { if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GL_TRUE); if (action == GLFW_PRESS || action == GLFW_REPEAT) { switch (key) { case GLFW_KEY_W: moveCamera(1.f, 0.f, 0.f); break; case GLFW_KEY_S: moveCamera(-1.f, 0.f, 0.f); break; case GLFW_KEY_A: moveCamera(0.f, -1.f, 0.f); break; case GLFW_KEY_D: moveCamera(0.f, 1.f, 0.f); break; case GLFW_KEY_Z: moveCameraGlobal(0.f, 0.f, -1.f); break; case GLFW_KEY_Q: moveCameraGlobal(0.f, 0.f, 1.f); break; case GLFW_KEY_I: turnCamera(1.f, 0.f, 0.f); break; case GLFW_KEY_K: turnCamera(-1.f, 0.f, 0.f); break; case GLFW_KEY_L: turnCamera(0.f, -1.f, 0.f); break; case GLFW_KEY_J: turnCamera(0.f, 1.f, 0.f); break; case GLFW_KEY_T: changeFOV(-1.f); break; case GLFW_KEY_Y: changeFOV(1.f); break; case GLFW_KEY_M: light = camera_pos; break; case GLFW_KEY_P: nextRenderMethod(); break; /*default:*/ } } }
// Setup OpenGL perspective void setupOpengl() { glViewport(0, 0, WIDTH, HEIGHT); glMatrixMode(GL_PROJECTION); glEnable(GL_DEPTH_TEST); changeFOV(45); glMatrixMode(GL_MODELVIEW); }
void mainLoop() { changeFOV(fov); while(true) { processEvents(); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // Clear color and depth buffer glLoadIdentity(); // Reset orientation if(fov != fov_accel || ang_accel != 0.f || y_offset_accel != 0.f) { changeFOV(fov_accel); } drawRegularBox(0,0); for(int i = -16; i < 17; i++) { for( int j = -16; j < 17; j++) { if(i < 2 && i > -2 && j < 2 && j > -2) { break; } int thing = ((i+16)*57 + (j+16)*109)%34 ; if(thing < 6 || thing > 22) { drawRegularBox(10*i, 10 * j); } } } SDL_GL_SwapBuffers(); // Update screen } }