OpenGLを使ってみる。その2 -2Dポリゴンの描画-

まずは2Dポリゴンを描画します。

サンプル

  • [download]
  • VC++2008EE

ビューポートの設定

スクリーン上の座標で頂点座標を指定できるように、ビューポート、プロジェクション行列、ビュー行列を設定します。
プロジェクション行列はglOrthoで正射影行列を設定します。

  • glViewport
  • glMatrixMode
    • GL_PROJECTION
    • GL_MODELVIEW
  • glLoadIdentity
  • glOrtho
ビューポートのリサイズ関数

初期化時、ウィンドウリサイズ時に呼ばれます

void Resize( int width, int height )
{
    //
    //ビューポートの設定
    //
    glViewport( 0, 0, width, height );

    //
    //プロジェクション行列の設定(とりあえず正射影)
    //
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( 0.0f, ( float )width, ( float )height, 0.0f, 0.0f, 1.0f );

    //
    //ビュー行列の設定
    //
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
}
初期化関数
bool Init( HWND hwnd )
{
    //レンダリングコンテキストの作成など
    /*...*/

    wglMakeCurrent( dc, glrc );

    //
    //ビューポートの設定
    //
    RECT r; GetClientRect( hwnd, &r );
    Resize( r.right - r.left, r.bottom - r.top );

    wglMakeCurrent( dc, 0 );

    /*...*/
}
ウィンドウプロシージャ
    case WM_SIZE:
        if( glrc )
        {
            hdc = GetDC( hWnd );
            wglMakeCurrent( hdc, glrc );
            Resize( LOWORD( lParam ), HIWORD( lParam ) );
            wglMakeCurrent( hdc, 0 );
            ReleaseDC( hWnd, hdc );
        }
        break;

        //背景の再描画を行わない
    case WM_ERASEBKGND:
        return TRUE;

ポリゴンの描画

  • glBegin
    • GL_LINES
    • GL_TRIANGLES
    • GL_QUADS
    • など
  • glEnd
  • glColor4f
  • glVertex3f
  • glTexCoord2f
  • glNormal3f
描画関数
void Render( HDC dc )
{
    glClearColor( 0.1f, 0.1f, 0.1f, 1.0f );
    glClearDepth( 1.0f );
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glBegin( GL_QUADS );
        glColor4f( 1.0f, 0.0f, 0.0f, 1.0f );
        glVertex3f( 10.0f, 10.0f, 0.0f );
        glColor4f( 0.0f, 1.0f, 0.0f, 1.0f );
        glVertex3f( 110.0f, 10.0f, 0.0f );
        glColor4f( 0.0f, 0.0f, 1.0f, 1.0f );
        glVertex3f( 110.0f, 110.0f, 0.0f );
        glColor4f( 1.0f, 1.0f, 0.0f, 1.0f );
        glVertex3f( 10.0f, 110.0f, 0.0f );
    glEnd();

    SwapBuffers( dc );
}