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が手前 )。
