Title: OpenGL Basic Drawing
1OpenGL Basic Drawing
2A Smidgen of OpenGL Code
- include ltwhateverYouNeed.hgt
- 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()
3OpenGL Command Syntax -1
- OpenGL constants prefix by GL_.
- OpenGL routines prefixed by gl and suffiexed by
the number of arguments and type. - glVertex2i, glNormal3f, glTexCoord2fvetc
4OpenGL Command Syntax -2
5OpenGL 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().
6OpenGL 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().
7GLUT 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)
8GLUT 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
9GLUT 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.
10GLUT 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
11GLUT 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
12GLUT 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 )
13Start GLUT framework
- glutMainLoop()
- Like Win32s message loop.
- Start all GLUT operations.
14GLUT Complete sample -1
- include ltGL/glut.hgt
- 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 ()
15GLUT 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.
- /
16GLUT 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.
/ -
17GLUT Complete sample result
18GLUT 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.
19GLUT 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()
20A Drawing Survival Kit -1
- Clearing the window
- glClear( GLbitfield mask )
- GL_COLOR_BUFFER_BIT -gt glClearColor( )
- GL_DEPTH_BUFFER_BIT -gt 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.
21A Drawing Survival Kit -2
- Specifying Vertices
- glVertex2,3,4sifdv( )
- Ex glVertex3f( 1.0f, 0.5f, 2.0f )
- Vertex array
- Not introduced here.
22A 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()
23A Drawing Survival Kit -4
24A 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)
25A 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 )
26A 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 )
27A Drawing Survival Kit -8
- Specifying a Shading Model
- glShadeModel( GLenum mode )
- mode GL_SMOOTH(default), GL_FLAT
28Any Question?