implement all guides
This commit is contained in:
parent
0aaee9de33
commit
d5080935ff
@ -78,17 +78,59 @@ void DroneController::drawTrajectory(QOpenGLExtraFunctions *f, const Drone &d) c
|
|||||||
|
|
||||||
void DroneController::drawGuide(QOpenGLExtraFunctions *f, const Drone &d) const {
|
void DroneController::drawGuide(QOpenGLExtraFunctions *f, const Drone &d) const {
|
||||||
OpenGLWidget::instance->getLineProgram()->bind();
|
OpenGLWidget::instance->getLineProgram()->bind();
|
||||||
OpenGLWidget::instance->getLineProgram()->setUniformValue("color", .2, .2, .2);
|
f->glEnableVertexAttribArray(0);
|
||||||
GLfloat data[6] = {
|
f->glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
f->glDisable(GL_CULL_FACE);
|
||||||
|
|
||||||
|
QVector<GLfloat> support_line {
|
||||||
d.getPos().x(), 0, d.getPos().z(),
|
d.getPos().x(), 0, d.getPos().z(),
|
||||||
d.getPos().x(), d.getPos().y(), d.getPos().z(),
|
d.getPos().x(), d.getPos().y(), d.getPos().z(),
|
||||||
};
|
};
|
||||||
f->glEnableVertexAttribArray(0);
|
|
||||||
f->glBindBuffer(GL_ARRAY_BUFFER, 0);
|
|
||||||
f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, data);
|
|
||||||
glLineWidth(2);
|
glLineWidth(2);
|
||||||
f->glDisable(GL_CULL_FACE);
|
OpenGLWidget::instance->getLineProgram()->setUniformValue("color", .2, .2, .4);
|
||||||
|
f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, support_line.constData());
|
||||||
f->glDrawArrays(GL_LINES, 0, 2);
|
f->glDrawArrays(GL_LINES, 0, 2);
|
||||||
|
|
||||||
|
QVector<GLfloat> grid;
|
||||||
|
const int size = 1000;
|
||||||
|
const float offset = 0;
|
||||||
|
for (int i = -size; i < size; i += 10) {
|
||||||
|
grid.append(i);
|
||||||
|
grid.append(offset);
|
||||||
|
grid.append(-size);
|
||||||
|
grid.append(i);
|
||||||
|
grid.append(offset);
|
||||||
|
grid.append(size);
|
||||||
|
grid.append(-size);
|
||||||
|
grid.append(offset);
|
||||||
|
grid.append(i);
|
||||||
|
grid.append(size);
|
||||||
|
grid.append(offset);
|
||||||
|
grid.append(i);
|
||||||
|
}
|
||||||
|
glLineWidth(1);
|
||||||
|
OpenGLWidget::instance->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);
|
||||||
|
|
||||||
|
glDisable(GL_DEPTH_TEST); // pro-gamer move
|
||||||
|
QVector<GLfloat> axes {
|
||||||
|
0, 0, 0, 1, 0, 0,
|
||||||
|
0, 0, 0, 0, 1, 0,
|
||||||
|
0, 0, 0, 0, 0, 1
|
||||||
|
};
|
||||||
|
glLineWidth(2);
|
||||||
|
OpenGLWidget::instance->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);
|
||||||
|
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);
|
||||||
|
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);
|
f->glEnable(GL_CULL_FACE);
|
||||||
OpenGLWidget::instance->getLineProgram()->release();
|
OpenGLWidget::instance->getLineProgram()->release();
|
||||||
OpenGLWidget::instance->getMainProgram()->bind();
|
OpenGLWidget::instance->getMainProgram()->bind();
|
||||||
|
@ -207,7 +207,10 @@ void OpenGLWidget::paintGL() {
|
|||||||
main_program.setUniformValue("view", view);
|
main_program.setUniformValue("view", view);
|
||||||
main_program.setUniformValue("highlight", false);
|
main_program.setUniformValue("highlight", false);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glEnable(GL_POLYGON_OFFSET_FILL);
|
||||||
|
glPolygonOffset(1, 1);
|
||||||
ground->draw(this, QMatrix4x4());
|
ground->draw(this, QMatrix4x4());
|
||||||
|
glDisable(GL_POLYGON_OFFSET_FILL);
|
||||||
if (painter) painter->draw(this);
|
if (painter) painter->draw(this);
|
||||||
main_program.release();
|
main_program.release();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user