void GameScreen::gameLoop() { switch (_currentState) { case SHOWING_SPLASH_SCREEN: { showSplashScreen(); _currentState = PLAYING; } break; case SHOWING_MENU: { showMenu(); } break; case PLAYING: { inputHandling(); } break; case PAUSED: break; case EXITING: break; default: break; } }
void render(GLFWwindow* window) { int width, height; glfwGetFramebufferSize(window, &width, &height); inputHandling(window); /********** Section camera view **********/ glm::vec3 cameraPosition(0,2,7); glm::vec4 cameraPositionTransformed = glm::rotate(glm::mat4(1.0f), angleX, glm::vec3(0,1,0)) * glm::rotate(glm::mat4(1.0f), angleY, glm::vec3(1,0,0))* glm::vec4(cameraPosition, 1.0f); cameraPosition = glm::vec3(XYZ(cameraPositionTransformed)); // come from http://www.opengl-tutorial.org/fr/beginners-tutorials/tutorial-3-matrices/ glm::mat4 Projection = glm::perspective(glm::radians(45.0f), (float)width / (float)height, 0.1f, 50.0f); // Camera matrix glm::mat4 ViewCamera = glm::lookAt( cameraPosition, // Camera is at (4,3,3), in World Space glm::vec3(0,0,0), // and looks at the origin glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down) ); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 mvpCamera = Projection * ViewCamera * Model; // Remember, matrix multiplication is the other way around //glProgramUniformMatrix4fv(gs.programView, 23, 1, GL_FALSE, &mvpCamera[0][0]); /********** Section lumière **********/ glm::vec3 lightPosition(0, 5.f, 15.f); glm::vec4 lightPositionTransformed = glm::rotate(glm::mat4(1.0f), anglePhiLight, glm::vec3(0,1,0)) * glm::rotate(glm::mat4(1.0f), angleTetaLight, glm::vec3(1,0,0)) * glm::vec4(lightPosition,1.0f); /*** calcul du mvp de la caméra lumière (déplacement de la lumière donc calcule ici) ***/ lightPosition = glm::vec3(XYZ(lightPositionTransformed)); Projection = glm::perspective(glm::radians(45.0f), (float)width / (float)height, 0.1f, 50.0f); // Light Camera matrix glm::mat4 ViewLightCamera = glm::lookAt( lightPosition, // Camera is at (4,3,3), in World Space glm::vec3(0,0,0), // and looks at the origin glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down) ); // Our ModelViewProjection : multiplication of our 3 matrices glm::mat4 mvpLightCamera = Projection * ViewLightCamera * Model; // Remember, matrix multiplication is the other way around //glProgramUniformMatrix4fv(gs.programView, 22, 1, GL_FALSE, &mvpLightCamera[0][0]); float color[3] = { 0, 1, 0 }; glProgramUniform3fv(gs.programView, 3, 1, color); glProgramUniform3fv(gs.programView, 4, 1, glm::value_ptr(lightPosition)); glBindFramebuffer(GL_FRAMEBUFFER, gs.fbo); glViewport(0, 0, width, height); glClear(GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); glUseProgram(gs.programView); glBindVertexArray(gs.vao); { glProgramUniformMatrix4fv(gs.programView, 22, 1, GL_FALSE, &mvpLightCamera[0][0]); glProgramUniformMatrix4fv(gs.programView, 23, 1, GL_FALSE, &mvpLightCamera[0][0]); glProgramUniform3fv(gs.programView, 3, 1, color); glProgramUniform3fv(gs.programView, 4, 1, glm::value_ptr(lightPosition)); glDrawArrays(GL_TRIANGLES, 0, nbVertex*4); } //glBindFramebuffer(GL_FRAMEBUFFER, 0); //glBindVertexArray(0); //glUseProgram(0); glBindFramebuffer(GL_FRAMEBUFFER, 0); glViewport(0, 0, width, height); glClear(GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); //glUseProgram(gs.programView); //glBindVertexArray(gs.vao); { glProgramUniformMatrix4fv(gs.programView, 23, 1, GL_FALSE, &mvpCamera[0][0]); glProgramUniformMatrix4fv(gs.programView, 22, 1, GL_FALSE, &mvpLightCamera[0][0]); glProgramUniform3fv(gs.programView, 3, 1, color); glProgramUniform3fv(gs.programView, 4, 1, glm::value_ptr(lightPosition)); glDrawArrays(GL_TRIANGLES, 0, nbVertex*4); } glBindVertexArray(0); glUseProgram(0); }