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.カーソルキーでカメラを操作してみましょう。
|
|