4. 図形の描画

-節の内容-

前節で描画の準備が整いました。
この節では、直線や円など単純な図形の描画を行ってみます。


-サンプルコード-

//-----------------------------------------------------
// ファイル名 : main.cpp
// 更新日 : 2011.11.13 (Sun) 8:18
// 作成者 : ぬっち
// 概要 : 「4. 図形の描画」のサンプルファイル。
//-----------------------------------------------------

//-----------------------------------------------------
// インクルード
//-----------------------------------------------------

#include <MAPIL/MAPIL.h>

//-----------------------------------------------------
// メイン関数
//-----------------------------------------------------

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
	// MAPILライブラリの機能を使えるようにする。
	using namespace MAPIL;

	// GUIデバイスの作成。
	IGUIDevice guiDev = CreateGUIDevice( GUI_API_WIN32API );

	// GUIファクトリーの作成。
	GUIFactory* pGUIFactory = CreateGUIFactory( guiDev );

	// グラフィックスデバイスの作成
	IGraphicsDevice graphicsDev = CreateGraphicsDevice( GRAPHICS_API_DIRECT3D );

	// グラフィックスファクトリーの作成
	GraphicsFactory* pGraphicsFactory = CreateGraphicsFactory( graphicsDev );

	// ウィンドウリソースの取得。
	IWindow window = pGUIFactory->CreateWnd( TSTR( "Window" ) );

	// グラフィックスコンテキストの取得。
	IGraphicsContext graphicsContext = pGUIFactory->CreateGraphicsContext( TSTR( "Graphics Context" ) );

	// GUIデバイスのインスタンス化
	guiDev->Create();

	// ウィンドウのインスタンス化。
	window->Create( TSTR( "MAPIL Sample" ), 640, 480 );

	// グラフィックスコンテキストのインスタンス化。
	graphicsContext->Create( TSTR( "Graphics Context" ), 640, 480, window );

	// グラフィックスデバイスのインスタンス化
	graphicsDev->Create( graphicsContext );

	// グラフィックスコントローラの取得
	IGraphicsController graphicsController = pGraphicsFactory->CreateGraphicsController( TSTR( "Graphics Controller" ) );

	// グラフィックスコントローラのインスタンス化
	graphicsController->Create( graphicsContext );

	
	// Canvas2Dの取得
	ICanvas2D canvas = pGraphicsFactory->CreateCanvas2D( TSTR( "Canvas 2D" ) );
	
	// Canvas2Dのインスタンス化
	canvas->Create();
	

	// メインループ
	while( !window->ProcessMessage() ){
		// 描画開始
		graphicsController->BeginRendering();

		// 描画処理をここに記述する
		
		
		// 図形描画の開始
		canvas->Begin();

		// 点の描画
		canvas->DrawPoint( 20, 20, ColorARGB < float > ( 1.0f, 0.0f, 1.0f, 0.0f ), 1.0f );
		// 線の描画
		canvas->DrawLine( 300, 300, 400, 400, ColorARGB < float > ( 1.0f, 1.0f, 1.0f, 1.0f ), 1.0f );
		// 円の描画
		canvas->DrawCircle( 100, 100, 5.0f, ColorARGB < float > ( 1.0f, 1.0f, 0.0f, 1.0f ), 1.0f );
		// 四角形の描画
		canvas->DrawRect( 200, 200, 250, 250, ColorARGB < float > ( 1.0f, 0.0f, 0.0f, 1.0f ), 1.0f );

		// 図形描画の終了
		canvas->End();
		

		// 描画修了
		graphicsController->EndRendering();
	}

	// 後始末。
	SafeDelete( pGraphicsFactory );
	SafeDelete( pGUIFactory );

	return 0;
}

ソースコード
main.cpp


-サンプルコードの説明-

今回追加されたソースコードは今までのときと異なり、直感的でわかりやすいと思います。
最初に、簡単な図形を描画するためのCanvas2Dクラスを今までのリソース取得と同じように、作成します。
ICanvas2D canvas = pGraphicsFactory->CreateCanvas2D( TSTR( "Canvas 2D" ) );
引数は作成したCanvas2Dオブジェクトを示す識別文字列です。
続いて、Canvas2Dオブジェクトのインスタンス化を行います。
canvas->Create();
これで、簡単な図形を描画する準備が整いました。
実際に描画するためには、コメントで「描画処理をここに記述する」の下に描画処理を書いていけばよいことになります。
図形を描画させるためには、
canvas->Begin();
と、
canvas->End();
の間に図形の描画処理を書かなくてはなりません。
今回は「点」「直線」「円」「四角形」の描画を行っています。
最初に点の描画です。
canvas->DrawPoint( 20, 20, ColorARGB < float > ( 1.0f, 0.0f, 1.0f, 0.0f ), 1.0f );
第1、第2引数に点を描画するX座標、Y座標をそれぞれ指定します。
第3引数には、描画する点の色を指定します。
ColorARGBは、第1引数がアルファ成分、第2引数が赤色成分、第3引数が緑色成分、第4引数が青色成分となっています。
色成分は、0.0f〜1.0fの間で指定します。
指定した色は、緑色となります。
第4引数は、点のサイズです。
次に、線の描画です。
canvas->DrawLine( 300, 300, 400, 400, ColorARGB < float > ( 1.0f, 1.0f, 1.0f, 1.0f ), 1.0f );
第1、第2引数に、線の開始点のX座標、Y座標を指定します。
第3、第4引数には、線の終了点のX座標、Y座標を指定します。
第5引数には、描画する線の色を指定します。
今回の場合は、白色となります。
第5引数は、線の太さを指定します。
その次は、円の描画です。
canvas->DrawCircle( 100, 100, 5.0f, ColorARGB < float > ( 1.0f, 1.0f, 0.0f, 1.0f ), 1.0f );
第1、第2引数には、円の中心のX座標、Y座標を指定します。
第3引数には、円の半径を指定します。
第4引数には、円の色を指定します。
今回の場合、紫色となります。
第5引数には、円を構成する線の太さを指定します。
最後に四角形を描画します。
canvas->DrawRect( 200, 200, 250, 250, ColorARGB < float > ( 1.0f, 0.0f, 0.0f, 1.0f ), 1.0f );
第1、第2引数には、左上の点のX座標、Y座標を指定します。
第3、第4引数には、右下の点のX座標、Y座標を指定します。
第5引数には、四角形の色を指定します。
今回の場合は、青色となります。
第5引数には、四角形を構成する線の太さを指定します。


-実行結果-

上記のサンプルを実行すると、真っ黒な画面の上に、緑色の点(1 pixel分なのでみにくいかもしれません。)、白色の線、紫色の円、青色の四角形が描画されていることがわかると思います。。
前回までと同様×ボタンを押すことで、プログラムを終わらせることが出来ます。

4節 サンプル 実行結果

inserted by FC2 system