OpenGL Basic Drawing - PowerPoint PPT Presentation

1 / 28
About This Presentation
Title:

OpenGL Basic Drawing

Description:

OpenGL Basic Drawing. Jian-Liang Lin. 2002. A Smidgen of OpenGL Code #include whateverYouNeed.h ... You put it into various states (or modes) that then remain ... – PowerPoint PPT presentation

Number of Views:134
Avg rating:3.0/5.0
Slides: 29
Provided by: jll7
Category:

less

Transcript and Presenter's Notes

Title: OpenGL Basic Drawing


1
OpenGL Basic Drawing
  • Jian-Liang Lin
  • 2002

2
A 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()

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, glTexCoord2fvetc

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 Win32s message loop.
  • Start all GLUT operations.

14
GLUT 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 ()

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 -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.

21
A Drawing Survival Kit -2
  • Specifying Vertices
  • glVertex2,3,4sifdv( )
  • 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?
  • ?
Write a Comment
User Comments (0)
About PowerShow.com