47 lines
1.6 KiB
C++
47 lines
1.6 KiB
C++
#include "NavController.h"
|
|
|
|
#include "Controller.h"
|
|
#include "../ui/map/3D/MapView3D.h"
|
|
#include "../ui/map/2D/MapView2D.h"
|
|
|
|
Q_DECLARE_METATYPE(const void*)
|
|
|
|
NavController::NavController(Controller* mainController, Floorplan::IndoorMap* im) : mainController(mainController), im(im) {
|
|
|
|
// hacky.. but we need to call this one from the main thread!
|
|
//mainController->getMapView()->showParticles(pf->getParticles());
|
|
qRegisterMetaType<const void*>();
|
|
|
|
}
|
|
|
|
void NavController::updateMapView() {
|
|
|
|
const float kappa1 = display_ms / 1000.0f;
|
|
const float kappa2 = kappa1 * 0.7;
|
|
|
|
const float myHeight_m = 1.80;
|
|
|
|
curPosFast = curPosFast * (1-kappa1) + curEst.pos_m * (kappa1);
|
|
curPosSlow = curPosSlow * (1-kappa2) + curEst.pos_m * (kappa2);
|
|
|
|
const Point3 dir = (curPosFast - curPosSlow).normalized();
|
|
const Point3 dir2 = Point3(dir.x, dir.y, -0.2).normalized();
|
|
|
|
// how to update the camera
|
|
if (cameraMode == 0) {
|
|
mainController->getMapView3D()->setLookAt(curPosFast + Point3(0,0,myHeight_m), dir);
|
|
} else if (cameraMode == 1) {
|
|
mainController->getMapView3D()->setLookAt(curPosFast + Point3(0,0,myHeight_m) - dir2*4, dir2);
|
|
} else if (cameraMode == 2) {
|
|
const Point3 spectator = curPosFast + Point3(0,0,25) - dir*15;
|
|
const Point3 spectatorDir = (curPosFast - spectator).normalized();
|
|
mainController->getMapView3D()->setLookEye(spectator);
|
|
mainController->getMapView3D()->setLookDir(spectatorDir);
|
|
}
|
|
|
|
mainController->getMapView3D()->setClipAbove(curEst.pos_m.z + 2);
|
|
mainController->getMapView3D()->setCurrentEstimation(curEst.pos_m, dir);
|
|
mainController->getMapView2D()->setCurrentEstimation(curEst.pos_m, dir);
|
|
|
|
}
|