draw a cube; rotate cube over time; enable cull face
This commit is contained in:
parent
eb83cb256e
commit
45453d8ebc
37
app.cc
37
app.cc
@ -32,6 +32,7 @@ bool init(void)
|
|||||||
{
|
{
|
||||||
glClearColor (0.0, 0.0, 0.0, 0.0);
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
#if 0
|
#if 0
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
@ -107,6 +108,19 @@ bool init(void)
|
|||||||
|
|
||||||
static void draw_cube()
|
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;
|
glm::mat4 modelview_backup = modelview;
|
||||||
|
|
||||||
program->use();
|
program->use();
|
||||||
@ -116,16 +130,33 @@ static void draw_cube()
|
|||||||
glUniform4f(uniforms.specular, 1.0, 1.0, 1.0, 1.0);
|
glUniform4f(uniforms.specular, 1.0, 1.0, 1.0, 1.0);
|
||||||
glUniform1f(uniforms.shininess, 150.0);
|
glUniform1f(uniforms.shininess, 150.0);
|
||||||
glUniform1i(uniforms.tex, 0);
|
glUniform1i(uniforms.tex, 0);
|
||||||
glUniformMatrix4fv(uniforms.modelview, 1, GL_FALSE, &modelview[0][0]);
|
|
||||||
glUniformMatrix4fv(uniforms.projection, 1, GL_FALSE, &projection[0][0]);
|
glUniformMatrix4fv(uniforms.projection, 1, GL_FALSE, &projection[0][0]);
|
||||||
|
|
||||||
|
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);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modelview = modelview_backup;
|
||||||
|
}
|
||||||
|
|
||||||
void display(SDL_Window * window)
|
void display(SDL_Window * window)
|
||||||
{
|
{
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
modelview = glm::translate(glm::mat4(1.0), glm::vec3(0, 0, -5));
|
modelview = glm::lookAt(glm::vec3(-1, -8, 7),
|
||||||
modelview = glm::rotate(modelview, (float)(SDL_GetTicks() / 1000.0), glm::vec3(0, 1, 0));
|
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();
|
draw_cube();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user