From 659b82e6c2b06f6f14a96da383ff45a56b937d93 Mon Sep 17 00:00:00 2001 From: Wolfgang Draxinger Date: Wed, 2 Nov 2011 22:46:06 +0100 Subject: Simplemost example for managing input with GLUT altering the state of the rendered scene. --- .../glut_input_transforms/glut_input_transforms.c | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 samples/OpenGL/glut_input_transforms/glut_input_transforms.c diff --git a/samples/OpenGL/glut_input_transforms/glut_input_transforms.c b/samples/OpenGL/glut_input_transforms/glut_input_transforms.c new file mode 100644 index 0000000..b23f5f0 --- /dev/null +++ b/samples/OpenGL/glut_input_transforms/glut_input_transforms.c @@ -0,0 +1,81 @@ +#include +#include +#include + +struct { + float triangle_rotation; +} scene; + +static const GLfloat triangle_vertices[3][3] = { + {-1., -1., 0.}, + { 1., -1., 0.}, + { 0., 0.732, 0.} +}; + +static void draw_triangle() +{ + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(3, GL_FLOAT, 3*sizeof(GLfloat), &triangle_vertices[0][0]); + glDrawArrays(GL_TRIANGLES, 0, 3); + glDisableClientState(GL_VERTEX_ARRAY); +} + +static void display(void) +{ + const int window_width = glutGet(GLUT_WINDOW_WIDTH); + const int window_height = glutGet(GLUT_WINDOW_HEIGHT); + if( !window_width || !window_height ) + return; + const float window_aspect = (float)window_width / (float)window_height; + + glDisable(GL_SCISSOR_TEST); + + glClearColor(0.4, 0.3, 0.5, 1.0); + glClearDepth(1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glViewport(0, 0, window_width, window_height); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-window_aspect, window_aspect, -1, 1, 2, 10); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0., 0., -5.); + + glPushMatrix(); + glRotatef(scene.triangle_rotation, 0., 1., 0.); + draw_triangle(); + glPopMatrix(); + + glutSwapBuffers(); +} + +static void special_key(int key, int x, int y) +{ + switch(key) { + case GLUT_KEY_LEFT: + scene.triangle_rotation = fmod(scene.triangle_rotation + 5, 360); + break; + case GLUT_KEY_RIGHT: + scene.triangle_rotation = fmod(scene.triangle_rotation - 5, 360); + break; + default: + break; + } + glutPostRedisplay(); +} + +int main(int argc, char *argv[]) +{ + glutInit(&argc, argv); + + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); + glutCreateWindow("Simple input altering scene demo"); + glutDisplayFunc(display); + glutSpecialFunc(special_key); + + glutMainLoop(); +} + -- cgit v1.2.3