OpenGLプログラミング(準備)

Direct3DとOpenGLどっちにしようと迷ったあげくOpenGLで遊ぶことに。なんかの拍子にPS3で3Dやるかもしれないしネ。
OpenGLは昔にちょろっとポリゴン出したくらいの初心者同然なので、OpenGL本家サイトやGoogle頼りに基本から。

まずWindowsでOpenGLを使うために必要な準備として、レンダーコンテキストの作成から。
ウィンドウを作る→ピクセルフォーマットを選択する→OpenGLレンダーコンテキストを作るの流れ。
ウィンドウ作成はWindowsでプログラム書くときにはあたりまえの行為なのでスルーするとして、以降の手続きはチュートリアルサイトからコピペ。

void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC)
{
    PIXELFORMATDESCRIPTOR pfd;
    int iFormat;

    // get the device context (DC)
    *hDC = GetDC( hWnd );

    // set the pixel format for the DC
    ZeroMemory( &pfd, sizeof( pfd ) );
    pfd.nSize = sizeof( pfd );
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 32;
    pfd.cDepthBits = 16;
    pfd.iLayerType = PFD_MAIN_PLANE;
    iFormat = ChoosePixelFormat( *hDC, &pfd );
    SetPixelFormat( *hDC, iFormat, &pfd );

    // create and enable the render context (RC)
    *hRC = wglCreateContext( *hDC );
    wglMakeCurrent( *hDC, *hRC );
}

void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent( NULL, NULL );
    wglDeleteContext( hRC );
    ReleaseDC( hWnd, hDC );
}

あとは、普通にOpenGL APIを使うだけでおk。

	glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
	glClear( GL_COLOR_BUFFER_BIT );
	glPushMatrix();
	glBegin(GL_TRIANGLES);
	glVertex2f( 0.0, 0.5);
	glVertex2f(-0.5, -0.5);
	glVertex2f( 0.5, -0.5);
	glEnd();
	glPopMatrix();
	glFlush();
	SwapBuffers( dc );

で、こう書くと三角形がウィンドウ内に表示されるはず。

OpenGLの初期状態は、カメラ座標原点で-Z方向に向いていて、プロジェクションその他もろもろも含めてビューポートに表示される範囲が+1~-1の範囲。ちなみに座標系は右手系( +X が右、+Yが上、+Zが手前 )。

コメントをどうぞ