From 45453d8ebc2f7960cf2e9228a1378c63fe572daf Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 13 Oct 2015 23:03:45 -0400 Subject: [PATCH] draw a cube; rotate cube over time; enable cull face --- app.cc | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/app.cc b/app.cc index c9d730c..d35ca00 100644 --- a/app.cc +++ b/app.cc @@ -32,6 +32,7 @@ bool init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); #if 0 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -107,6 +108,19 @@ bool init(void) static void draw_cube() { + static const struct + { + int counts; + float axis[3]; + } rotations[] = { + {0, {0, 0, 0}}, + {1, {1, 0, 0}}, + {2, {1, 0, 0}}, + {3, {1, 0, 0}}, + {1, {0, 1, 0}}, + {3, {0, 1, 0}}, + }; + glm::mat4 modelview_backup = modelview; program->use(); @@ -116,16 +130,33 @@ static void draw_cube() glUniform4f(uniforms.specular, 1.0, 1.0, 1.0, 1.0); glUniform1f(uniforms.shininess, 150.0); glUniform1i(uniforms.tex, 0); - glUniformMatrix4fv(uniforms.modelview, 1, GL_FALSE, &modelview[0][0]); glUniformMatrix4fv(uniforms.projection, 1, GL_FALSE, &projection[0][0]); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + for (int i = 0; i < sizeof(rotations) / sizeof(rotations[0]); i++) + { + if (rotations[i].counts > 0) + { + modelview = glm::rotate(modelview_backup, + (float)(M_PI / 2.0 * rotations[i].counts), + glm::vec3(rotations[i].axis[0], + rotations[i].axis[1], + rotations[i].axis[2])); + } + glUniformMatrix4fv(uniforms.modelview, 1, GL_FALSE, &modelview[0][0]); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + } + + modelview = modelview_backup; } void display(SDL_Window * window) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - modelview = glm::translate(glm::mat4(1.0), glm::vec3(0, 0, -5)); - modelview = glm::rotate(modelview, (float)(SDL_GetTicks() / 1000.0), glm::vec3(0, 1, 0)); + modelview = glm::lookAt(glm::vec3(-1, -8, 7), + glm::vec3(0, 0, 0), + glm::vec3(0, 0, 1)); + modelview = glm::rotate(modelview, (float)(SDL_GetTicks() / 1000.0), glm::vec3(0, 0, 1)); + modelview = glm::translate(modelview, glm::vec3(3, 0, 0)); draw_cube();