void CreateCamera(int width, int height, vector3df position, vector3df target) { //Build camera ISceneManager* sm = g_GameGraph->GetSceneManager(); WorldState* worldState = static_cast<WorldState*> (g_GameGraph->GetWorldState()); HexMap* hm = worldState->GetCurrentMap(); if (NULL != sm) { if (NULL != hm) { ICameraSceneNode* orthoCam = sm->addCameraSceneNode( sm->getRootSceneNode(), position, target); matrix4 projMat; projMat.buildProjectionMatrixOrthoLH(width, height, -5, 5); orthoCam->setProjectionMatrix(projMat, true); orthoCam->bindTargetAndRotation(true); if (orthoCam->isOrthogonal()) { CameraAnimator* cameraAnim = new CameraAnimator(position, width, height, hm->GetMapDimensions().Height, hm->GetMapDimensions().Width, worldState->GetHero(), hm->GetCoordinateTranslator()); orthoCam->addAnimator(cameraAnim); cameraAnim->drop(); cameraAnim = NULL; if (width > height) { LOGI("Creating a landscape camera."); landscapeCamera = orthoCam; } else { LOGI("Creating a portrait camera"); portraitCamera = orthoCam; } } else { LOGE("The created camera is not orthoganol, something is wrong with the perspective matrix."); } } else { LOGE("The hex map created in the WorldState is NULL."); } } else { LOGE("The scene manager cannot be loaded from the device."); } }
ICameraSceneNode *irrMMDaddRokuroCamera(IrrlichtDevice *device, f32 distance) { ICameraSceneNode* camera = device->getSceneManager()->addCameraSceneNode(); CSceneNodeAnimatorCameraRokuro* animator= new CSceneNodeAnimatorCameraRokuro( device->getCursorControl()); camera->addAnimator(animator); animator->setDistance(distance); animator->drop(); return camera; }