Не удаётся отрисовать фигуру OpenGL

240
06 марта 2018, 04:18

Пытаюсь нарисовать квадрат Серпинского (не суть важно) с помощью библиотеки OpenGL в Qt. Пока есть такой код:

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mywidget.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MyWidget *widget=new MyWidget(this);
    ui->horizontalSlider->setMaximum(5);
    ui->horizontalSlider->setMinimum(0);
    ui->horizontalSlider->setValue(0);
    ui->horizontalSlider->setTickInterval(1);
    ui->horizontalSlider->setTickPosition( QSlider::TicksBothSides );
    QObject::connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),widget,SLOT(setFractal(int)));
}
MainWindow::~MainWindow()
{
    delete ui;
}

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QMainWindow>
#include <QObject>
#include <QWidget>
#include <QGLWidget>
#include <math.h>

class MyWidget: public QGLWidget
{
    Q_OBJECT
public:
    MyWidget(QWidget *parent = 0);
    void initializeGL();
    void paintGL();
    void drawFract(float x1, float y1, float x2, float y2, int n);
private:
    int step;
public slots:
    void setFractal(int f);
};
#endif // MYWIDGET_H

mywidget.cpp

#include <QtDebug>
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent):
    QGLWidget(parent)
{
    this->step = 1;
    this->drawFract(20, 20, 460, 460, this->step);
    setGeometry(0,0,500,500);
}
void MyWidget::initializeGL(){
    glClearColor(0.1, 0.5, 0.2, 1);
    glViewport(0,0,500,500);
}
void MyWidget::paintGL(){
    glClear(GL_COLOR_BUFFER_BIT);
    this->drawFract(20, 20, 460, 460, this->step);
}
void MyWidget::drawFract(float x1, float y1, float x2, float y2, int n){
    if(n <= 0)
        return;
    float x1n = 2*x1/3 + x2 / 3,
          y1n = x1/3 + 2*x2 / 3,
          x2n = 2*y1/3 + y2 / 3,
          y2n = y1/3+2*y2 / 3;
    glLineWidth(3);
    glBegin(GL_QUADS);
    glColor3f(1, 1, 0);
    glVertex2f(x1n, y1n);
    glVertex2f(x2n, y1n);
    glVertex2f(x2n, y2n);
    glVertex2f(x1n, y2n);
    glEnd();
    drawFract(x1, y1, x1n, y1n, n-1);
    drawFract(x1n, y1, x2n, y1n, n-1);
    drawFract(x2n, y1, x2, y1n, n-1);
    drawFract(x1, y1n, x1n, y2n, n-1);
    drawFract(x2n, y1n, x2, y2n, n-1);
    drawFract(x1, y2n, x1n, y2, n-1);
    drawFract(x1n, y2n, x2n, y2, n-1);
    drawFract(x2n, y2n, x2, y2, n-1);
}
void MyWidget::setFractal(int f){
    this->step = f;
    this->drawFract(20, 20, 460, 460, f);
    this->updateGL();
}

Всё успешно компилируется и запускается, но ничего не прорисовывается... Подскажите пожалуйста, что я забыл/упустил или вообще, неверно написал, т.к я только начинаю осваивать OpenGL и Qt.

READ ALSO
Какая проблема в этом коде? [требует правки]

Какая проблема в этом коде? [требует правки]

Xcode явных ошибок не находит, но показывает вот такие эрроры:

207
Расшифровка в &ldquo;C++&rdquo; с помощью массивов

Расшифровка в “C++” с помощью массивов

Как осуществить расшифровку текста с данным ключом с помощью массивов? (В "C++" 2-ой месяц)

178