interactive computer graphics
play

Interactive Computer Graphics CS 418 Fall 2012 MP1: Dancing I - PowerPoint PPT Presentation

Interactive Computer Graphics CS 418 Fall 2012 MP1: Dancing I Slides Taken from: TA: Gong Chen An Interactive Introduction to OpenGL Programming Email: gchen10 at illinois dot edu Dave Shreiner, Ed Angel, Vicki Shreiner Agenda


  1. Interactive Computer Graphics CS 418 – Fall 2012 MP1: Dancing I Slides Taken from: TA: Gong Chen “An Interactive Introduction to OpenGL Programming” Email: gchen10 at illinois dot edu Dave Shreiner, Ed Angel, Vicki Shreiner

  2. Agenda  MP1 Submission Announcement  A little more OpenGL  Applications Structure  Callback functions  Double Buffering (required)  Animation Techniques  MP Q&A 2

  3. GLUT Basics  Application Structure  Configure and open window  Initialize OpenGL state  Register input callback functions ▪ render/display ▪ resize ▪ input: keyboard, mouse, etc.  Enter event processing loop 3

  4. Sample Program void main( int argc, char** argv ) { int mode = GLUT_RGB|GLUT_DOUBLE; glutInitDisplayMode( mode ); glutCreateWindow( argv[0] ); init(); glutDisplayFunc( display ); glutReshapeFunc( resize ); glutKeyboardFunc( key ); glutIdleFunc( idle ); glutMainLoop(); } 4

  5. OpenGL Initialization  Set up whatever state you’re going to use.  In our MP1 Case only this: void init( void ) { glClearColor( 0.0, 0.0, 0.0, 1.0 ); } 5

  6. GLUT Callback Functions  Routine to call when something happens  window resize or redraw  user input  animation  “Register” callbacks with GLUT glutDisplayFunc( display ); glutIdleFunc( idle ); glutKeyboardFunc( keyboard ); 6

  7. Rendering Callback  Do all of your drawing here glutDisplayFunc( display ); void display( void ) { glClear( GL_COLOR_BUFFER_BIT ); glBegin( GL_TRIANGLE_STRIP ); glVertex3fv( v[0] ); glVertex3fv( v[1] ); glVertex3fv( v[2] ); glVertex3fv( v[3] ); glEnd(); glutSwapBuffers(); } 7

  8. Idle Callbacks  Use for animation and continuous update glutIdleFunc( idle ); void idle( void ) { glutPostRedisplay(); } 8

  9. User Input Callbacks  Process user input glutKeyboardFunc( keyboard ); void keyboard( char key, int x, int y ) { switch( key ) { case ‘q’ : case ‘Q’ : exit( EXIT_SUCCESS ); break; case ‘r’ : case ‘R’ : rotate = GL_TRUE; break; } } 9

  10. Double Buffering 1 1 2 2 4 4 Front Back 8 8 16 16 Buffer Buffer Display 10

  11. Animation Using Double Buffering  Request a double buffered color buffer glutInitDisplayMode (GLUT_RGB |GLUT_DOUBLE);  Clear color buffer glClear ( GL_COLOR_BUFFER_BIT );  Render scene  Request swap of front and back buffers glutSwapBuffers(); Interesting Example  Repeat steps 2 - 4 for animation 11

  12. Sine Waves-Simple Animation  3 ways to generate sine waves in software:  y = sin(x) ▪ Easiest – But the slowest way  2. Look Up Table  3. Look Up Table Plus First Order (Linear) Interpolation

  13. Lookup Table  generate an array of the sine values and store them in memory. ▪ use the symmetry properties of the sine wave to minimize the memory storage Example: Obtain y=sin(x) in one degree steps: For x Є (0,90) , we can create the array: float sine[91] , pi=3.141592653; for (int i=0;i<=90;i++) sine[i] = sin(pi/180 * i); Then, if we wanted the sine of 45 degrees, we simply write y = sine[45];

  14. Lookup Table (cont.) Example (cont.): Obtain the other 3/4's of the circle: we can use the symmetry of sine wave. Each quadrant is obtained as follows: y = sine[ 180 - x]; /* 90 <= x <= 180 */ y = -sine[x - 180]; /* 180 <= x <= 270 */ /* 270 <= x <= 360 */ y = -sine[360 - x];

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend