-GLuint pyramidVao, lightVao, teapotVao;
-GLuint gradientProgId, solidProgId, normalProgId;
-glm::vec3 camPos = glm::vec3(0.0f, 0.0f, -10.0f);
-glm::vec3 camFront = glm::vec3(0.0f, 0.0f, 1.0f);
-glm::vec3 camUp = glm::vec3(0.0f, 1.0f, 0.0f);
-float yaw = 1.57, pitch = 0;
-bool doScale, doRotate, doTranslate;
-
-const int WIDTH = 800, HEIGHT = 600;
-const float ASPECT = (float)WIDTH / (float)HEIGHT;
-
-void setProjectionAndViewUniforms(GLuint progId) {
- GLuint projId = glGetUniformLocation(progId, "projection");
- glm::mat4 proj = glm::perspective(glm::radians(45.f), ASPECT, 0.01f, 10000.f);
- glUniformMatrix4fv(projId, 1, GL_FALSE, glm::value_ptr(proj));
-
- GLuint viewId = glGetUniformLocation(progId, "view");
- glm::mat4 view = glm::lookAt(camPos, camPos + camFront, camUp);
- glUniformMatrix4fv(viewId, 1, GL_FALSE, glm::value_ptr(view));
-}
-
-void setLightColorAndPos(GLuint progId, glm::vec3 lightPos, glm::vec4 lightColor) {
- GLuint lightColorLoc = glGetUniformLocation(progId, "lightColor");
- glUniform4fv(lightColorLoc, 1, glm::value_ptr(lightColor));
-
- GLuint lightPosLoc = glGetUniformLocation(progId, "lightPos");
- glUniform3fv(lightPosLoc, 1, glm::value_ptr(lightPos));
-}
-
-void drawLight(float d, glm::vec3 lightPos, glm::vec4 lightColor) {
- glUseProgram(solidProgId);
- glBindVertexArray(lightVao);
- setProjectionAndViewUniforms(solidProgId);
- glm::mat4 model = glm::translate(glm::mat4(1.f), lightPos);
- model = glm::scale(model, glm::vec3(0.2));
- GLuint modelId = glGetUniformLocation(solidProgId, "model");
- glUniformMatrix4fv(modelId, 1, GL_FALSE, glm::value_ptr(model));
-
- GLuint colorLoc = glGetUniformLocation(solidProgId, "color");
- glm::vec4 color(lightColor);
- glUniform4fv(colorLoc, 1, glm::value_ptr(color));
-
- glDrawArrays(GL_TRIANGLES, 0, 36);
-};
-
-void drawPyramids(float d, glm::vec3 lightPos, glm::vec4 lightColor) {
- glUseProgram(gradientProgId);
- glBindVertexArray(pyramidVao);
- setProjectionAndViewUniforms(gradientProgId);