Home | Lesson | Game | Tool | Link

B10.カメラ操作

固定カメラの角度調整や操作を行います。
カメラはsetRotationで角度の変更ができないため、
別の方法でカメラを操作する必要があります。
例として、cubeの周りを回転するようにしてみます。
※カメラの角度を変えたい時はsetTargetで行えます。


カメラ設定
カメラを作成します。
カメラマン(node)を用意して、カメラマンにカメラを持たせるようなイメージにします。
また、撮影ターゲットの後方上部にカメラマンがいるようにします。
//カメラ用node設定
ISceneNode *targetNode       = smgr->addEmptySceneNode(0);//カメラ用ターゲット作成
ISceneNode *CameramanNode    = smgr->addEmptySceneNode(targetNode);//ターゲットが親
CameramanNode->setPosition(vector3df(-100,30,0));//ターゲットの後ろちょっと上から
ICameraSceneNode *CameraNode = smgr->addCameraSceneNode(CameramanNode);//カメラ作成

cube配置
カメラのターゲットと同じ場所にcubeを配置しておきます。
//cube配置
ISceneNode* node = smgr->addCubeSceneNode();
node->setPosition(vector3df(0,0,0));
node->setMaterialTexture(0, driver->getTexture("data/wall.bmp"));
node->setMaterialFlag(EMF_LIGHTING, false);

メインループ
ターゲットを回転させます。
カメラマンはターゲットの後方上部に位置が固定されているので、
カメラマンも一緒に回転することになります。

ここでは、カメラは常に中央(ターゲット)を見ていますが、
角度を指定したり、別のターゲットを指定して、視点を変えることも可能です。
f32 rotate = 0;

while(device->run())
{
	//カメラ位置修正
	rotate += 0.05f;
	if(rotate > 360.0f)rotate = 0.0f;
	targetNode->setRotation(vector3df(0,rotate,0));	//ターゲットを回転
	CameraNode->setTarget(vector3df(0,0,0));		//中央を見る

	driver->beginScene(true,true,0x006060C0);

	smgr->drawAll();//シーンの描画<

	driver->endScene();
}



setTarget
カメラのターゲットを設定します。
void setTarget(
	vector3df& pos
)
pos カメラのターゲットを設定します。


setTarget
setTargetを使用することで、カメラの角度を指定することができます。
setRotationでは角度は指定できないので、注意してください。
また、setTargetだけでは1回転とかもできません。
細かく指定したい場合は、色々と組み合わせる必要があります。

ダウンロード
今回作成したファイル一式です。
※マップファイルも同梱してあるので重くなっています。

宿題
1.カーソルキーでカメラを操作してみましょう。