From da37a84d5f8b2eeb1c41cba033abebdce12f148a Mon Sep 17 00:00:00 2001 From: ccolin Date: Mon, 4 Jan 2021 01:29:44 +0100 Subject: add drone names when guides are enabled --- src/drone_controller.cc | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'src/drone_controller.cc') diff --git a/src/drone_controller.cc b/src/drone_controller.cc index 24cfa2d..99df662 100644 --- a/src/drone_controller.cc +++ b/src/drone_controller.cc @@ -5,6 +5,7 @@ #include #include #include +#include const unsigned char DroneController::sphere_neutral[] = { @@ -77,7 +78,9 @@ void DroneController::drawTrajectory(QOpenGLExtraFunctions *f, const Drone &d) c void DroneController::drawGuide(QOpenGLExtraFunctions *f, const Drone &d) const { - OpenGLWidget::instance->getLineProgram()->bind(); + OpenGLWidget *glw = OpenGLWidget::instance; + + glw->getLineProgram()->bind(); f->glEnableVertexAttribArray(0); f->glBindBuffer(GL_ARRAY_BUFFER, 0); f->glDisable(GL_CULL_FACE); @@ -87,7 +90,7 @@ void DroneController::drawGuide(QOpenGLExtraFunctions *f, const Drone &d) const d.getPos().x(), d.getPos().y(), d.getPos().z(), }; glLineWidth(2); - OpenGLWidget::instance->getLineProgram()->setUniformValue("color", .2, .2, .4); + glw->getLineProgram()->setUniformValue("color", .2, .2, .4); f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, support_line.constData()); f->glDrawArrays(GL_LINES, 0, 2); @@ -109,7 +112,7 @@ void DroneController::drawGuide(QOpenGLExtraFunctions *f, const Drone &d) const grid.append(i); } glLineWidth(1); - OpenGLWidget::instance->getLineProgram()->setUniformValue("color", .2, .2, .2); + glw->getLineProgram()->setUniformValue("color", .2, .2, .2); f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, grid.constData()); f->glDrawArrays(GL_LINES, 0, grid.size() / 3); @@ -117,23 +120,37 @@ void DroneController::drawGuide(QOpenGLExtraFunctions *f, const Drone &d) const QVector axes { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 1 + 0, 0, 0, 0, 0, 1, }; glLineWidth(2); - OpenGLWidget::instance->getLineProgram()->setUniformValue("color", 1, 0, 0); + glw->getLineProgram()->setUniformValue("color", 1, 0, 0); f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, axes.constData()); f->glDrawArrays(GL_LINES, 0, 2); - OpenGLWidget::instance->getLineProgram()->setUniformValue("color", 0, 1, 0); + glw->getLineProgram()->setUniformValue("color", 0, 1, 0); f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, axes.constData() + 6); f->glDrawArrays(GL_LINES, 0, 2); - OpenGLWidget::instance->getLineProgram()->setUniformValue("color", 0, 0, 1); + glw->getLineProgram()->setUniformValue("color", 0, 0, 1); f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, axes.constData() + 12); f->glDrawArrays(GL_LINES, 0, 2); glDisable(GL_DEPTH_TEST); f->glEnable(GL_CULL_FACE); - OpenGLWidget::instance->getLineProgram()->release(); - OpenGLWidget::instance->getMainProgram()->bind(); + glw->getLineProgram()->release(); + glw->getMainProgram()->bind(); + + QVector3D text_pos = d.getPos(); + text_pos.setY(text_pos.y() + .5); + QPoint screen_pos; + if (!glw->project(text_pos, screen_pos)) return; + QPainter painter(glw); + painter.endNativePainting(); + painter.setRenderHint(QPainter::Antialiasing); + painter.setPen(Qt::green); + QRect rect(0, 0, 200, 100); + rect.moveCenter({screen_pos.x(), screen_pos.y()}); + painter.drawText(rect, Qt::AlignCenter, QString::number(d.getId())); + painter.beginNativePainting(); + painter.end(); } -- cgit v1.2.3-70-g09d2