Interactive Mandelbrot viewer with Qt and OpenGL.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.1 KiB

3 years ago
#include "../headers/Mandelbrot.h"
3 years ago
void Mandelbrot::init() {
3 years ago
initializeOpenGLFunctions();
}
void Mandelbrot::draw(GLuint vao, QOpenGLShaderProgram& shader) {
glClear(GL_COLOR_BUFFER_BIT);
shader.bind();
setShaderValues(shader);
glBindVertexArray(vao);
glDrawArrays(GL_QUADS, 0, 4);
glBindVertexArray(0);
3 years ago
}
3 years ago
void Mandelbrot::setShaderValues(QOpenGLShaderProgram &shader) const {
shader.setUniformValue("origin", origin);
shader.setUniformValue("size", size);
shader.setUniformValue("iterationCount", iterations);
}
void Mandelbrot::zoomRelative(int direction, QVector2D posRelative) {
float modifier = direction < 0 ? zoomModifier : (1 / zoomModifier);
QVector2D newSize = size * modifier;
QVector2D fixPos = origin + posRelative * size;
QVector2D newOrigin = fixPos - posRelative * newSize;
size = newSize;
origin = newOrigin;
3 years ago
}
3 years ago
3 years ago
void Mandelbrot::setIterations(int value) {
iterations = value;
3 years ago
}
3 years ago
void Mandelbrot::translateRelative(QVector2D relative) {
QVector2D absolute = relative * size;
origin -= absolute;
}
void Mandelbrot::resizeRelative(QVector2D relative) {
size *= relative;
}
3 years ago