OpenGLを使ってみる。その2 -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 ); }