OpenGL Programming for Windows MFC


3.Scamped Animation


3.1 XXXView.h に以下のメンバー変数追加

    CDC*    m_pDC ;     // Device Context 
    HGLRC   m_GLRC  ;   // OpenGL Rendering Context

    GLfloat m_rAngle ;  // Rotation angle
This member variable addition to XXXView.h.

3.2 CXXXView(コンストラクタ)に以下の行を追加

CXXXView::CXXXView()
{

    m_rAngle = 0.0 ;

}
The above line is added to CXXXView(Constructor).


3.3 OnDraw を以下のように変更

void CXXXView::OnDraw(CDC* pDC)
{
    CXXXDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    InvalidateRect (NULL, FALSE);

    m_rAngle += 2.0 ;

    if (m_rAngle >= 360.0f) {
        m_rAngle = m_rAngle - 360.0f ;
    }

    DrawGL(m_rAngle) ;

    SwapBuffers(m_pDC->m_hDC) ;    // Double buffer
}
OnDraw is changed as mentioned above.


3.4 DrawGL を以下のように変更

GLint DrawGL(GLfloat rAngle)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;

    glMatrixMode(GL_MODELVIEW) ;
    glLoadIdentity() ;
    glTranslated(0.0, 0.0, -3.0) ;

    glRotatef(rAngle, 0.0f, 1.0f, 0.0f) ;

    auxWireTeapot(1.0) ;

    return(0) ;
}
DrawGL is changed as mentioned above.

3.5 Build and Execute

ビルド・実行すると、Teapotオブジェクトが回転する。


A Teapot object rotates.
解説書などでは、アニメーションは SetTimer を使用するようになっているが、 Windows9x のタイマーがタコなためうまく いかない場合がある。

prev next