Home | Lesson | Game | Tool | Link

A06.平行投影

画面を平行投影(正射影)で描画します。
通常は透視法射影での描画で、遠くのものほど小さく表示されます。
平行投影だと遠くのものも近くのものも大きさが変わらずに表示されます。


カメラ設定
通常通りカメラを用意します。
カメラに平行投影用マトリックスを設定することで、平行投影が可能になります。
	//カメラ設定
	ICameraSceneNode *camera;
	camera = smgr->addCameraSceneNode(0,vector3df(5,5,-5),vector3df(0,0,0));
	//並行投影設定
	matrix4 matrix;
	matrix.buildProjectionMatrixOrthoLH(8,6,-5,100); //w,h,near,far
	camera->setProjectionMatrix(matrix);


buildProjectionMatrixOrthoLH
左手座標系の直角なプロジェクションマトリックスを作成します。
void buildProjectionMatrixOrthoLH(
	f32 widthOfViewVolume,
	f32 heightOfViewVolume,
	f32 zNear,
	f32 zFar
)
widthOfViewVolume  ビューボリュームの横幅を指定します。
heightOfViewVolume ビューボリュームの縦幅を指定します。
zNear              描画する手前までの距離を指定します。
zFar               描画する奥までの距離を指定します。

確認用ノード用意
立方体を2個用意して、少し離して設置します。
	//立体ノードを作成1(通常)
	ISceneNode* node = 0;
	node = smgr->addCubeSceneNode(2.0f);
	node->setPosition(vector3df(-2,0,0));
	node->setMaterialTexture(0, driver->getTexture("wall.bmp"));
	node->setMaterialFlag(EMF_LIGHTING, false);

	//立体ノードを作成2(透明)
	node = smgr->addCubeSceneNode(2.0f);
	node->setPosition(vector3df(2,0,0));
	node->setMaterialTexture(0, driver->getTexture("wall.bmp"));
	node->setMaterialFlag(EMF_LIGHTING, false);
	node->setMaterialFlag(EMF_ZBUFFER, false);	//Zバッファ比較:off
	node->setMaterialFlag(EMF_BACK_FACE_CULLING, false);
	node->setMaterialType(EMT_TRANSPARENT_ADD_COLOR);


平行投影
平行投影が使われているゲームとしては、以下のようなものがあります。
・タクティクスオウガ(SFC)
・ボンバーマン(FC)
平行投影にすることで、ビルボードの拡大縮小がなくなるので、
テクスチャを綺麗に表示させることができます。

実際の現場では、建築/CADなどで使用されています。

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

宿題
1.立方体の数を増やして、ボンバーマン風の画面を作ってみましょう。