Home | Lesson | Game | Tool | Link

1.ウインドウ表示

今後のlessonでの基本となるウインドウを作成します。


ライブラリとインクルードファイルの設定
1.windows用にwindows.hをインクルードします。
2.#pragma commentで指定したライブラリを検索します。
3.irrlicht.hも忘れずにインクルードします。
#ifdef WIN32
	#include <windows.h>
	#pragma comment(lib, "Irrlicht.lib")
#endif
#include <irrlicht.h>

namespaceの設定
irrlichtでは、irr::core::dimension2dという様に定義されています。
毎回、長い名前を記述するのは大変なので、namespaceを使用します。
namespaceを使用することで、irr::core::dimension2dは「dimension2d」ですむようになります。
videoやsceneなどもあるので、同様にnamespcaeで指定しておきましょう。
(irr,core,gui,io,scene,videoを指定しておけば、今後楽になるかもしれません。)
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;

main関数の指定
通常はmainでよいのですが、WinMainを使用することで、邪魔なコンソールウインドウを非表示にします。 プロジェクトを作成する際に、「Win32 コンソールアプリケーション」を指定して、mainを記述することで、 windowsでもコンソールウインドウが表示されるようになります。
#ifdef WIN32
	int WINAPI WinMain(HINSTANCE hInst, HINSTANCE 
		hPrevInst, LPSTR strCmdLine, int nShowCmd)
#else
	int main()
#endif
{

デバイスとドライバの設定
デバイスとは画用紙(ウインドウ)で、以下のようなものを指定することができます。
・どのドライバを使用するか
・ウインドウのサイズはどうするか
・フルスクリーンにするかどうか
ドライバとは絵を描く画家です。画家がいないと、画面には何も描くことができません。
	IrrlichtDevice *device = 
		createDevice(EDT_OPENGL,dimension2d<s32>(320,240),16,false,false,false);
	IVideoDriver *driver = device->getVideoDriver();


createDevice
Irrlichtデバイスを作成します。Irrlichtデバイスは、エンジンのルートオブジェクトになる大事なものです。
IrrlichtDevice* createDevice(
	E_DRIVER_TYPE           deviceType    = EDT_SOFTWARE,
	const dimension2d<s32>& windowSize    = dimension2d<s32>(640,480),
	u32                     bits          = 16,
	bool                    fullscreen    = false,
	bool                    stencilbuffer = false,
	bool                    vsync         = false,
	IEventReceiver*         receiver      = 0,
	const c8*               sdk_version_do_not_use = IRRLICHT_SDK_VERSION
)
deviceType             デバイスのタイプを指定します。以下を指定できます。
                       EDT_NULL
                       EDT_SOFTWARE
                       EDT_BURNINGSVIDEO
                       EDT_DIRECT3D8
                       EDT_DIRECT3D9
                       EDT_OPENGL
windowSize             ウインドウのサイズを指定します。
bits                   bit深度を指定します。(フルスクリーンのみ)
fullscreen             フルスクリーンモードで起動するかどうかを指定します。
stencilbuffer          ステンシルバッファを使用するかどうかを指定します。
vsync                  垂直同期を行うかどうかを指定します。(フルスクリーンのみ)
receiver               イベントを受け取るオブジェクトを指定します。
sdk_version_do_not_use SDKのバージョンチェックで使用するので、変更しないでください。

ウインドウのキャプションを設定
作ったウインドウに名前をつけます。
キャプション名の左に「L」がついていますが、これはirrlichtエンジンでワイド文字を使用するためです。
	//ウインドウタイトル設定
	device->setWindowCaption(L"IrrLicht");

メインループを記述
画用紙があるうち(runとは、ウインドウが実行している間=ウインドウが閉じるまで)はループします。 beginSceneで描画を開始(塗りつぶし)し、endSceneで終了します。
(ここでは、画面を塗りつぶしては終了する、という動作を繰り返していることになります。)
今後は、beginSceneとendSceneの間に、描画の指示をすることになります。
	while(device->run())
	{
		driver->beginScene(true,true,0xFF6060FF);
		driver->endScene();
	}


beginScene
描画の開始命令です。描画をする前に必ず呼び出さなければいけません。
bool beginScene(
	bool   backBuffer,
	bool   zBuffer,
	SColor color
)
backBuffer colorパラメータで指定した値で、描画バッファをクリアするかどうか指定します。
zBuffer    Zバッファをクリアするかどうかを指定します。
color      描画バッファをクリアする色を指定します。
           0xAARRGGBBで指定することもできます。値はそれぞれ0x00〜0xFFで指定します。
           AA:アルファ値(無視されます)
           RR:赤の要素
           GG:緑の要素
           BB:青の要素

後始末
「create」を使用して作成したものは必ず「drop」で開放して下さい。
	device->drop();

	return 0;
}

以上で、青で塗りつぶされただけのウインドウが表示されます。

ダウンロード
今回作成したファイル一式です。

宿題
1.画面のサイズを(640,480)にしてみましょう。
2.画面の色を赤にしてみましょう。