- if (doScale)
- model = glm::scale(model, glm::vec3(1.f, 0.7f + 0.7f * (1 + sin(d + (i + 3))), 1.f));
-
- if (doTranslate)
- model = glm::translate(model, glm::vec3(sin(d + (i + 1)), cos(d + (i + -3)), sin(d + (i + 4))));
-
-
- glUniformMatrix4fv(modelId, 1, GL_FALSE, glm::value_ptr(model));
-
- glDrawArrays(GL_TRIANGLES, 0, 18);
- }
-
-};
-
-enum TeapotProjection { teapotOrtho, teapotCamera, teapotPerspStatic, teapotPerspAnimated };
-
-void drawTeapot(TeapotProjection proj, bool rotate, float d, glm::vec3 lightPos, glm::vec4 lightColor) {
- glUseProgram(normalProgId);
-
- GLuint projLoc = glGetUniformLocation(normalProgId, "projection");
- GLuint viewLoc = glGetUniformLocation(normalProgId, "view");
- switch (proj) {
- case teapotCamera:
- setProjectionAndViewUniforms(normalProgId);
- break;
- case teapotOrtho:
- {
- glm::mat4 proj = glm::ortho(-5.f * ASPECT, 5.f * ASPECT, -5.f, 5.f, 0.01f, 1000.f);
- glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(proj));
-
- glm::vec3 camPos(-5, 5, -5), camFront = glm::vec3(0) - camPos;
- glm::mat4 view = glm::lookAt(camPos, camPos + camFront, camUp);
- glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
- }
- break;
- case teapotPerspStatic:
- case teapotPerspAnimated:
- {
- float fov = glm::radians(45.f);
- if (proj == teapotPerspAnimated)
- fov += glm::radians(sin(d) * 30.f);
- glm::mat4 proj = glm::perspective(fov, ASPECT, 0.01f, 10000.f);
- glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(proj));
-
- glm::mat4 view = glm::lookAt(glm::vec3(0, 0, -10), glm::vec3(0), camUp);
- glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
- }
- break;
- }
- setLightColorAndPos(normalProgId, lightPos, lightColor);
- glBindVertexArray(teapotVao);
- GLuint modelId = glGetUniformLocation(normalProgId, "model");
- glm::mat4 model(1);
- model = glm::scale(model, glm::vec3(0.3));
- if (rotate) model = glm::rotate(model, d, glm::vec3(0, 1, 0));
- glUniformMatrix4fv(modelId, 1, GL_FALSE, glm::value_ptr(model));
-
- glDrawArrays(GL_TRIANGLES, 0, teapot_vertex_count);
-}