1 / 28

OpenGL Basic Drawing

OpenGL Basic Drawing. Jian-Liang Lin 2002. A Smidgen of OpenGL Code. # include <whateverYouNeed.h> main() { InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

hedda
Télécharger la présentation

OpenGL Basic Drawing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OpenGL Basic Drawing Jian-Liang Lin 2002

  2. A Smidgen of OpenGL Code #include <whateverYouNeed.h> main() { InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON); glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0); glEnd(); glFlush(); UpdateTheWindowAndCheckForEvents(); }

  3. OpenGL Command Syntax -1 • OpenGL constants prefix by GL_. • OpenGL routines prefixed by gl and suffiexed by the number of arguments and type. • glVertex2i, glNormal3f, glTexCoord2fv…etc

  4. OpenGL Command Syntax -2

  5. OpenGL as a State Machine -1 • OpenGL is a state machine. • You put it into various states (or modes) that then remain in effect until you change them. • As you've already seen, the current color is a state variable • Many state variables refer to modes that are enabled or disabled with the command glEnable() or glDisable().

  6. OpenGL as a State Machine -2 • Each state variable or mode has a default value, and at any point you can query the system for each variable's current value. • Typically, you use one of the six following commands to do this: glGetBooleanv(), glGetDoublev(), glGetFloatv(), glGetIntegerv(), glGetPointerv(), or glIsEnabled().

  7. GLUT: Overview • A very useful framework for rapid OpenGL program development. • Portable through lots of platforms. • Provide basic window, input, and event management. • Callback event handler. • Idle routine and timer. • A simple, cascading popup menu facility. • Offers lots of basic object. (wireframe/solid) • …

  8. GLUT: Initialize and creating a window -1 • glutInit( int* argc, char** argv ); • Initialize GLUT and process any command line arguments. • This should be called before any GLUT routines. • glutInitDisplayMode( unsigned int mode ); • Specify whether to apply RGBA mode or color-indexed mode. • GLUT_RGBA, GLUT_INDEX… • Single or double buffering. • GLUT_SINGLE, GLUT_DOUBLE… • Other buffers. • GLUT_DEPTH, GLUT_STENCIL, GLUT_ACCUM…

  9. GLUT: Initialize and creating a window -2 • glutInitWindowPosition( int x, int y ); • Specify the screen location of your window • glutInitWindowSize( int w, int h ); • Specify the size of your window in pixels. • glutCreateWindow( char* pTitle ); • Create a window with OpenGL context for rendering. • The window will appear until glutMainLoop() is called.

  10. GLUT: Callback function -1 • Callback functions are not called by you. They are called by GLUT. • You can register some functions to GLUT, and they can be called when meeting the situation. • Some types of callback • Window event handler • IO event handler • Global handler

  11. GLUT: Callback function -2 • glutDisplayFunc( void (*pfn)(void) ); • Display callback; GLUT called it when the content of the window needed to be updated. • You call manually call glutPostRedisplay() to arbitrarily ask GLUT to call that callback function. • glutReshapeFunc( void (*pfn)( int w, int h ) ); • GLUT called it when the size of window is changed. • Recalculate view frustum & viewport…

  12. GLUT: Callback function -3 • glutKeyboardFunc( void(*pfn)(unsigned char key, int x, int y )); and glutMouseFunc( void(*pfn)( int button, int state, int x, int y )); • User Input event handler. • glutMotionFunc( void(*pfn)( int x, int y )); • GLUT call this registered callback function when the mouse is moved while a mouse button is also pressed. • glutIdleFunc( void(*pfn)(void)); • GLUT call this registered callback function when idling. • You can simply call: • glutIdleFunc( glutPostRedisplay );

  13. Start GLUT framework • glutMainLoop(); • Like Win32’s message loop. • Start all GLUT operations.

  14. GLUT: Complete sample -1 #include <GL/glut.h> void display(void) { /* clear all pixels */ glClear (GL_COLOR_BUFFER_BIT); /* draw white polygon (rectangle) with corners at * (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */ glColor3f (1.0, 1.0, 1.0); glBegin(GL_POLYGON); glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0); glEnd(); /* don't wait! * start processing buffered OpenGL routines */ glFlush (); }

  15. GLUT: Complete sample -2 void init (void) { /* select clearing (background) color */ glClearColor (0.0, 0.0, 0.0, 0.0); /* initialize viewing values */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); } /* * Declare initial window size, position, and display mode * (single buffer and RGBA). Open window with "hello" * in its title bar. Call initialization routines. * Register callback function to display graphics. * Enter main loop and process events. */

  16. GLUT: Complete sample -3 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (250, 250); glutInitWindowPosition (100, 100); glutCreateWindow ("hello"); init (); glutDisplayFunc(display); glutMainLoop(); return 0; /* ISO C requires main to return int. */ }

  17. GLUT: Complete sample result

  18. GLUT: Simple 3D objects drawing support -1 • GLUT includes several 3D objects drawing: • Cone, cube, sphere, dodecahedron, icosahedron, octahedron, teapot, tetrahedron, torus. • Both wireframe and solid. • glutWireCube, glutSolidSphere … etc. • These objects are drawn centered at the origin of the world coordinate system.

  19. GLUT: Simple 3D objects drawing support -2 • You can try this simple display callback function and see the result. void display(void) { glClear( GL_COLOR_BUFFER_BIT ); glutWireCube( 1.0 ); glFlush(); }

  20. A Drawing Survival Kit -1 • Clearing the window • glClear( GLbitfield mask ); • GL_COLOR_BUFFER_BIT -> glClearColor( … ); • GL_DEPTH_BUFFER_BIT -> glClearDepth( … ); • Specifying a color • glColor3f( GLfloat r, GLfloat g, GLfloat b ); • glIndexi( int i ); • glutSetColor( int i, GLfloat r, GLfloat g, GLfloat b ); for setting indexed color.

  21. A Drawing Survival Kit -2 • Specifying Vertices • glVertex{2,3,4}{sifd}[v]( … ); • Ex: glVertex3f( 1.0f, 0.5f, 2.0f ); • Vertex array • Not introduced here.

  22. A Drawing Survival Kit -3 • OpenGL Geometric Drawing Primitives • glBegin( GLenum mode ); • mode is GL_POLYGON, GL_LINES … etc • glEnd(); • All primitives should be placed between these two OpenGL routines • Ex glBegin(GL_POLYGON); glVertex2f(0.0, 0.0); glVertex2f(0.0, 3.0); glVertex2f(4.0, 3.0); glVertex2f(6.0, 1.5); glVertex2f(4.0, 0.0); glEnd();

  23. A Drawing Survival Kit -4

  24. A Drawing Survival Kit -5 • Valid calls between glBegin(…); & glEnd(); • glVertex*(); glNormal*(); glColor*(); glIndex*(); glTexCoord*(); glMaterial*(); … • Forcing Completion of Drawing • glFlush(void); • Asynchronous • glFinish(void); • Synchronous • glutSwapBuffers(void); • Swap back buffer and front buffer. (Double buffering for animation)

  25. A Drawing Survival Kit -6 • Basic State Management • glEnable( … ); • Enable some state. Ex: glEnable( GL_LIGHTING ); • glDisable( … ); • Disable some state. Ex. glDisable( GL_TEXTURE_2D ); • glIsEnabled( … ); • Query if the specific state is enabled. Ex: glIsEnabled( GL_BLEND ); • glGetBooleanv(…); glGetIntegerv(…); glGetFloatv(…); glGetDoublev( … ); glGetPointerv(…); • Query the specific state value. • Ex: glGetIntegerv( GL_VIEWPORT, vp );

  26. A Drawing Survival Kit -7 • Polygon Detail • glPolygonMode( GLenum face, GLenum mode ); • face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK • mode: GL_POINT, GL_LINE, GL_FILL • glFrontFace( GLenum mode ); • mode: GL_CCW(default), GL_CW • glCullFace( GLenum mode ); • mode: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK • glEnable( GL_CULL_FACE );

  27. A Drawing Survival Kit -8 • Specifying a Shading Model • glShadeModel( GLenum mode ); • mode: GL_SMOOTH(default), GL_FLAT

  28. Any Question? ?

More Related