diff options
Diffstat (limited to 'src/drone_controller.cc')
-rw-r--r-- | src/drone_controller.cc | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/src/drone_controller.cc b/src/drone_controller.cc index 6ef78ad..588ac23 100644 --- a/src/drone_controller.cc +++ b/src/drone_controller.cc @@ -1,89 +1,7 @@ #include "drone_controller.hh" #include "opengl_widget.hh" -#include "load_obj.hh" #include <QJsonArray> -#include <QDebug> -#include <QFile> - - -Waypoint::Waypoint(unsigned frame, QVector3D pos) - :frame(frame), - pos(pos) {} - - -Waypoint::Waypoint(const QJsonObject &json) - :Waypoint(json["frame"].toInt(), - QVector3D(json["position"]["lng_X"].toInt() / 100.0, - json["position"]["alt_Y"].toInt() / 100.0, - json["position"]["lat_Z"].toInt() / 100.0)) {} - - -bool Drone::mesh_initialized = false; -OpenGLMesh *Drone::mesh = nullptr; - -Drone::Drone(int id) - :id(id) { - if (!mesh_initialized) { - QVector<GLfloat> verts = load_obj(":/mdl/dji600.obj", LOAD_OBJ_NORMALS | LOAD_OBJ_UVS); - QOpenGLTexture *texture = new QOpenGLTexture(QImage(":/img/dji600.jpg").mirrored()); - mesh = new OpenGLMesh(verts, texture); - mesh_initialized = true; - } - OpenGLWidget::instance->meshes.append(*mesh); - mesh_id = OpenGLWidget::instance->meshes.size() - 1; -} - - -Drone::Drone(const QJsonObject &json) - :Drone(json["id"].toInt()) { - QJsonArray ja = json["waypoints"].toArray(); - waypoints.reserve(ja.size()); - for (const QJsonValue &o : ja) { - waypoints.append(Waypoint(o.toObject())); - } -} - - -const QVector<Waypoint> Drone::getWaypoints() const { - return waypoints; -} - - -void Drone::setTo(int frame) { - int prev = -1, next = -1; - const Waypoint *prev_wp, *next_wp; - for (const Waypoint &wp : waypoints) { // TODO: this can be optimized - if (wp.frame < frame) { - prev = wp.frame; - prev_wp = ℘ - } else { - next = wp.frame; - next_wp = ℘ - break; - } - } - OpenGLMesh &mesh = OpenGLWidget::instance->meshes[mesh_id]; - mesh.mat = QMatrix4x4(); - if (next > -1 && prev == -1) { - pos = next_wp->pos; - } else if (prev > -1 && next == -1) { - pos = prev_wp->pos; - } else { - pos = lerp(prev_wp->pos, next_wp->pos, (double) (frame-prev) / (next-prev)); - } - mesh.mat.translate(pos); -} - - -QVector3D Drone::getPos() const { - return pos; -} - - -int Drone::getId() const { - return id; -} DroneController::DroneController(const QJsonObject &json) |