master
Benjamin Kraft 3 years ago
parent 2d8b0edb4a
commit 8671bcc5a2
  1. 2
      headers/MainWindow.h
  2. 10
      headers/Mandelbrot.h
  3. 3
      headers/OutputWidget.h
  4. 28
      src/MainWindow.cpp
  5. 10
      src/Mandelbrot.cpp
  6. 7
      src/OutputWidget.cpp

@ -8,7 +8,7 @@ class MainWindow : public QWidget {
public: public:
explicit MainWindow(); explicit MainWindow();
private slots: private slots:
void sizeSliderChanged(int); void iterationsSliderChanged(int);
private: private:
void buildUI(); void buildUI();

@ -4,13 +4,17 @@
#include <QVector2D> #include <QVector2D>
#include <QOpenGLFunctions> #include <QOpenGLFunctions>
class Mandelbrot : protected QOpenGLFunctions { class Mandelbrot : public QObject, protected QOpenGLFunctions {
Q_OBJECT
public: public:
Mandelbrot(); void init();
void draw(); void draw();
void zoom(double); void zoom(double);
public slots:
void setIterations(int);
private: private:
double scale; int iterations = 0;
double scale = 1;
QVector2D translation; QVector2D translation;
}; };

@ -10,7 +10,8 @@
class OutputWidget : public QOpenGLWidget, protected QOpenGLFunctions { class OutputWidget : public QOpenGLWidget, protected QOpenGLFunctions {
Q_OBJECT Q_OBJECT
public: public:
explicit OutputWidget(QWidget* parent): QOpenGLWidget(parent) {}; explicit OutputWidget(QWidget* parent): QOpenGLWidget(parent) {}
Mandelbrot* getMandelbrot() {return &mandelbrot;}
private: private:
void initializeGL() override; void initializeGL() override;
void paintGL() override; void paintGL() override;

@ -10,20 +10,32 @@ MainWindow::MainWindow() {
void MainWindow::buildUI() { void MainWindow::buildUI() {
resize(700, 700); resize(700, 700);
auto sizeSlider = new QSlider(Qt::Horizontal); auto iterationsSlider = new QSlider(Qt::Horizontal);
sizeSlider->setRange(100, 800); iterationsSlider->setRange(5, 300);
QSlider::connect(sizeSlider, &QSlider::valueChanged, this, &MainWindow::sizeSliderChanged); QSlider::connect(
sizeSlider->setValue(500); iterationsSlider,
&QSlider::valueChanged,
this->outputWidget->getMandelbrot(),
&Mandelbrot::setIterations
);
QSlider::connect(
iterationsSlider,
&QSlider::valueChanged,
this,
&MainWindow::iterationsSliderChanged
);
iterationsSlider->setValue(100);
auto controls = new QGridLayout; auto controls = new QGridLayout;
controls->addWidget(sizeSlider); controls->addWidget(iterationsSlider);
auto lyt = new QVBoxLayout(this); auto lyt = new QVBoxLayout(this);
lyt->addWidget(outputWidget); lyt->addWidget(outputWidget);
lyt->addLayout(controls); lyt->addLayout(controls);
} }
//TODO Handle size change void MainWindow::iterationsSliderChanged(int newValue) {
void MainWindow::sizeSliderChanged(int newValue) { //TODO update text label
update();
} }

@ -1,8 +1,10 @@
#include "../headers/Mandelbrot.h" #include "../headers/Mandelbrot.h"
Mandelbrot::Mandelbrot() { void Mandelbrot::init() {
initializeOpenGLFunctions(); initializeOpenGLFunctions();
} }
void Mandelbrot::draw() { void Mandelbrot::draw() {
@ -10,5 +12,11 @@ void Mandelbrot::draw() {
} }
void Mandelbrot::zoom(double delta) { void Mandelbrot::zoom(double delta) {
scale *= delta;
}
void Mandelbrot::setIterations(int value) {
iterations = value;
} }

@ -7,18 +7,17 @@ using std::cout, std::endl;
void OutputWidget::initializeGL() { void OutputWidget::initializeGL() {
cout << "Initialize OpenGL" << endl; cout << "Initialize OpenGL" << endl;
initializeOpenGLFunctions(); initializeOpenGLFunctions();
getMandelbrot()->init();
auto format = this->format(); auto format = this->format();
cout << "OpenGL version: " << cout << "OpenGL version: " << format.majorVersion() << "." << format.minorVersion() << endl;
format.majorVersion() << "." << format.minorVersion()
<< endl;
glClearColor(0.5f, 0.5f, 0.5f, 1.0f); glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
} }
void OutputWidget::paintGL() { void OutputWidget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
mandelbrot.draw(); getMandelbrot()->draw();
} }
void OutputWidget::resizeGL(int w, int h) { void OutputWidget::resizeGL(int w, int h) {

Loading…
Cancel
Save