aboutsummaryrefslogtreecommitdiff
path: root/src/drone_controller.cc
diff options
context:
space:
mode:
authorccolin2021-01-04 01:29:44 +0100
committerccolin2021-01-04 01:29:44 +0100
commitda37a84d5f8b2eeb1c41cba033abebdce12f148a (patch)
tree006652c81dbad1b62306e64958408c8339099c64 /src/drone_controller.cc
parentd5080935ff99e5f5e03cc05377413ee38287deec (diff)
add drone names when guides are enabled
Diffstat (limited to 'src/drone_controller.cc')
-rw-r--r--src/drone_controller.cc35
1 files changed, 26 insertions, 9 deletions
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 <QJsonArray>
#include <QDebug>
#include <QOpenGLShaderProgram>
+#include <QPainter>
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<GLfloat> 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();
}