Software Engineering and Computer Games

Look back at the code for CPopView::OnDraw(CDC* pDC) that we gave in Section 24.4: Graphics in the Pop Framework. Here is a bulleted list showing some of the corresponding OpenGL calls made by the _pgraphics member of CPopView if _pgraphics is of the type cGraphicsOpenGL* .

  • Wake up the graphics with

    _pgraphics->activate().

    This calls

    ::wglMakeCurrent ( _pDC->GetSafeHdc(), _hRC )

  • Clear the graphics background with

    _pgraphics->clear(targetrect).

    This calls

    ::glClear ( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT );

  • Install the projection and view matrices with these lines.

    _pviewpointcritter->loadProjectionMatrix(); _pviewpointcritter->loadViewMatrix();

    These in turn call:

    ::glMatrixMode (GL_MODELVIEW) ::glLoadMatrixf (_pviewpointcritter->attitude().inverse()); ::glMatrixMode (GL_PROJECTION) ::gluPerspective (fieldofviewangleindegrees, xtoyaspectratio, nearzclip, farzclip); //Values from _pviewpointcritter

  • Draw your game world and then the critters with

    pgame()->drawCritters(_pgraphics, _drawflags).

    This generates a variety of ::gl and ::glu calls like, in the case of polygons

    ::glEnableClientState (GL_VERTEX_ARRAY); ::glVertexPointer (...); ::glDrawArrays (...);

  • Send the graphics to your video display with

    _pgraphics->display(this, pDC)

    This calls

    ::glFinish ();// Tell OpenGL to flush its pipeline ::SwapBuffers ( _pDC->GetSafeHdc() ); // Now Swap the buffers

Категории