From 7e0554bf65b9be61f3b73625d762a5043ad2af0f Mon Sep 17 00:00:00 2001 From: ccolin Date: Sun, 3 Jan 2021 13:27:01 +0100 Subject: collision sphere previsualization --- src/drone_controller.cc | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'src/drone_controller.cc') diff --git a/src/drone_controller.cc b/src/drone_controller.cc index 0be9844..514a166 100644 --- a/src/drone_controller.cc +++ b/src/drone_controller.cc @@ -1,14 +1,34 @@ #include "drone_controller.hh" #include "opengl_widget.hh" +#include "load_obj.hh" #include #include #include -DroneController::DroneController(const QJsonObject &json) - :framerate(json["framerate"].toInt()) { +const unsigned char DroneController::sphere_neutral[] = { + 166, 166, 166 +}; + +OpenGLMesh *DroneController::sphere = nullptr; + +DroneController::DroneController(const QJsonObject &json) + :framerate(json["framerate"].toInt()), + sphere_timer(this) { + sphere_timer.setSingleShot(true); + connect(&sphere_timer, &QTimer::timeout, [&]() { + draw_spheres = false; + OpenGLWidget::instance->update(); + }); + if (sphere == nullptr) { + OpenGLWidget::instance->makeCurrent(); + sphere = new OpenGLMesh(load_obj(":/mdl/sphere.obj", LOAD_OBJ_NORMALS | LOAD_OBJ_UVS), + new QOpenGLTexture(QImage(sphere_neutral, 1, 1, QImage::Format_RGB888)), + OpenGLWidget::instance->getMainProgram()); + OpenGLWidget::instance->makeCurrent(); + } QJsonArray ja = json["drones"].toArray(); drones.reserve(ja.size()); for (const QJsonValue &o : ja) { @@ -29,6 +49,10 @@ void DroneController::draw(QOpenGLExtraFunctions *f) const { QMatrix4x4 mat; mat.translate(d.getPos()); d.getMesh()->draw(f, mat); + if (draw_spheres) { + mat.scale(sphere_radius); + sphere->draw(f, mat); + } } } @@ -111,6 +135,14 @@ void DroneController::computeCollisions(double sphere_radius) { } +void DroneController::displaySpheres(double sphere_radius) { + draw_spheres = true; + this->sphere_radius = sphere_radius; + sphere_timer.start(1000); + OpenGLWidget::instance->update(); +} + + bool DroneController::collides(const Drone &a, const Drone &b, double sqDist) { return (b.getPos() - a.getPos()).lengthSquared() < sqDist; } -- cgit v1.2.3-70-g09d2