diff options
-rw-r--r-- | examples/opengl/legacy/pbuffers2/glwidget.cpp | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/examples/opengl/legacy/pbuffers2/glwidget.cpp b/examples/opengl/legacy/pbuffers2/glwidget.cpp index 447461dbb3..c710d03cab 100644 --- a/examples/opengl/legacy/pbuffers2/glwidget.cpp +++ b/examples/opengl/legacy/pbuffers2/glwidget.cpp @@ -302,31 +302,27 @@ void GLWidget::timerEvent(QTimerEvent *) else if (!scale_in && scale < .5f) scale_in = true; - scale = scale_in ? scale + scale*0.01f : scale-scale*0.01f; + scale *= scale_in ? 1.01f : 0.99f; rot_z += 0.3f; rot_x += 0.1f; - int dx, dy; // disturbance point - float s, v, W; - int i, j; - static float wt[128][128]; + static float wt = 0.0; + wt += 0.1f; + const int width = logo.width(); + const int dx = width >> 1, dy = dx; // disturbance point + const float v = -4; // wave speed + const float W = .3f; const int AMP = 5; - dx = dy = width >> 1; - - W = .3f; - v = -4; // wave speed - - for (i = 0; i < width; ++i) { - for ( j = 0; j < width; ++j) { - s = sqrt((double) ((j - dx) * (j - dx) + (i - dy) * (i - dy))); - wt[i][j] += 0.1f; - const double angle = 2 * M_PI * W * (wt[i][j] + s / v); + for (int i = 0; i < width; ++i) { + for (int j = 0; j < width; ++j) { + const float s = hypot(j - dx, i - dy); + const double raw = AMP * sin(2 * M_PI * W * (wt + s / v)); if (s != 0) - wave[i * width + j] = AMP * sin(angle) / (0.2 * (s + 2)); + wave[i * width + j] = raw / (0.2 * (s + 2)); else - wave[i * width + j] = AMP * sin(angle); + wave[i * width + j] = raw; } } } |