this works quite well, but is kind of ugly
got rid of the oscillation by limiting the step to full distance with fmin(delta, fabs(diff)
double diff = z - smoothLastZMouse;
if(fabs(diff) >= 1.0)
{
smoothLastZMouse += diff 0.01;
}
else
{
double delta = sqrt(fabs(diff)) 0.01;
smoothLastZMouse += (diff > 0 ? 1.0 : -1.0) * fmin(delta, fabs(diff));
}
double diff = z - smoothLastZMouse;
if(fabs(diff) >= 1.0)
{
smoothLastZMouse += diff * 0.01;
}
else
{
double delta = sqrt(fabs(diff)) * 0.01;
smoothLastZMouse += (diff > 0 ? 1.0 : -1.0) * fmin(delta, fabs(diff));
}