{ float value = fmodf(elapsedTime, loopDuration) / loopDuration; if(value > 0.5f) value = 1.0f - value; return value * 2.0f; } float CalcFrustumScale(float fovDeg) { const float degToRad = M_PI * 2.0f / 360.0f; float fovRad = fovDeg * degToRad; return 1.0f / tan(fovRad / 2.0f); } const float frustumScale = CalcFrustumScale(45.0f); void reshape(GLFWwindow* window, int width, int height) { cameraToClipMatrix[0].x = frustumScale / (width / float(height)); cameraToClipMatrix[1].y = frustumScale; glUseProgram(theProgram); glUniformMatrix4fv(cameraToClipMatrixUnif, 1, GL_FALSE, glm::value_ptr(cameraToClipMatrix)); glUseProgram(0); glViewport(0, 0, (GLsizei) width, (GLsizei) height); display(); glfwSwapBuffers(window); }
GLuint colorAttrib; GLuint modelToCameraMatrixUnif; GLuint cameraToClipMatrixUnif; GLuint baseColorUnif; glm::mat4 cameraToClipMatrix(0.0f); float CalcFrustumScale(float fFovDeg) { const float degToRad = 3.14159f * 2.0f / 360.0f; float fFovRad = fFovDeg * degToRad; return 1.0f / tan(fFovRad / 2.0f); } const float fFrustumScale = CalcFrustumScale(20.0f); void InitializeProgram() { std::vector<GLuint> shaderList; shaderList.push_back(Framework::LoadShader(GL_VERTEX_SHADER, "PosColorLocalTransform.vert")); shaderList.push_back(Framework::LoadShader(GL_FRAGMENT_SHADER, "ColorMultUniform.frag")); theProgram = Framework::CreateProgram(shaderList); positionAttrib = glGetAttribLocation(theProgram, "position"); colorAttrib = glGetAttribLocation(theProgram, "color"); modelToCameraMatrixUnif = glGetUniformLocation(theProgram, "modelToCameraMatrix"); cameraToClipMatrixUnif = glGetUniformLocation(theProgram, "cameraToClipMatrix");