fixed translating, added zooming

master
Benjamin Kraft 3 years ago
parent 6c10723997
commit 4d8b82eeee
  1. 3
      Vertex.glsl
  2. 4
      headers/Mandelbrot.h
  3. 8
      src/Mandelbrot.cpp
  4. 15
      src/OutputWidget.cpp

@ -8,7 +8,6 @@ out vec2 complexPos;
void main(){
vec2 offset = (pos + 1) / 2 * size;
offset.y *= -1;
complexPos = origin + offset;
gl_Position = vec4(pos.xy, 0.0, 1.);
gl_Position = vec4(pos.xy, 0, 1);
}

@ -11,10 +11,10 @@ public:
void draw(GLuint, QOpenGLShaderProgram&);
void setIterations(int);
void translateRelative(QVector2D);
void zoomRelative(double, QVector2D);
void zoomRelative(float, QVector2D);
private:
int iterations = 0;
QVector2D origin {-2, 1};
QVector2D origin {-2, -1};
QVector2D size {2, 2};
void setShaderValues(QOpenGLShaderProgram&) const;
};

@ -19,8 +19,12 @@ void Mandelbrot::setShaderValues(QOpenGLShaderProgram &shader) const {
shader.setUniformValue("iterationCount", iterations);
}
void Mandelbrot::zoomRelative(double delta, QVector2D posRelative) {
void Mandelbrot::zoomRelative(float delta, QVector2D posRelative) {
QVector2D newSize = size * delta;
QVector2D fixPos = origin + posRelative * size;
QVector2D newOrigin = fixPos - posRelative * newSize;
size = newSize;
origin = newOrigin;
}
void Mandelbrot::setIterations(int value) {

@ -72,12 +72,15 @@ QVector2D relative(QPoint p, QSize s){
}
void OutputWidget::wheelEvent(QWheelEvent *e) {
double modifier = 1;
QPoint pos = e->position().toPoint();
float modifier = 1;
if (e->angleDelta().y() > 0)
modifier *= 1.1;
else
modifier /= 1.1;
getMandelbrot()->zoomRelative(modifier, relative(mousePos, size()));
else
modifier *= 1.1;
QVector2D relativePos = relative(pos, size());
relativePos.setY(1 - relativePos.y());
getMandelbrot()->zoomRelative(modifier, relativePos);
update();
}
@ -85,7 +88,9 @@ void OutputWidget::mouseMoveEvent(QMouseEvent *e) {
QPoint newMousePos = e->pos();
QPoint diff = newMousePos - mousePos;
mousePos = newMousePos;
getMandelbrot()->translateRelative(relative(diff, size()));
QVector2D relativeDiff = relative(diff, size());
relativeDiff.setY(-relativeDiff.y());
getMandelbrot()->translateRelative(relativeDiff);
update();
}

Loading…
Cancel
Save