Fixed flickering of 3D scene GUI when the scene's bounding box gets very big

This commit is contained in:
enricoturri1966 2021-04-16 12:49:57 +02:00
parent 66f6c8c786
commit dabac92755

View file

@ -330,28 +330,28 @@ std::pair<double, double> Camera::calc_tight_frustrum_zs_around(const BoundingBo
far_z += FrustrumZMargin; far_z += FrustrumZMargin;
// ensure min size // ensure min size
if (far_z - near_z < FrustrumMinZRange) if (far_z - near_z < FrustrumMinZRange) {
{
double mid_z = 0.5 * (near_z + far_z); double mid_z = 0.5 * (near_z + far_z);
double half_size = 0.5 * FrustrumMinZRange; double half_size = 0.5 * FrustrumMinZRange;
near_z = mid_z - half_size; near_z = mid_z - half_size;
far_z = mid_z + half_size; far_z = mid_z + half_size;
} }
if (near_z < FrustrumMinNearZ) if (near_z < FrustrumMinNearZ) {
{ double delta = FrustrumMinNearZ - near_z;
float delta = FrustrumMinNearZ - near_z;
set_distance(m_distance + delta); set_distance(m_distance + delta);
near_z += delta; near_z += delta;
far_z += delta; far_z += delta;
} }
else if ((near_z > 2.0 * FrustrumMinNearZ) && (m_distance > DefaultDistance)) // The following is commented out because it causes flickering of the 3D scene GUI
{ // when the bounding box of the scene gets large enough
float delta = m_distance - DefaultDistance; // We need to introduce some smarter code to move the camera back and forth in such case
set_distance(DefaultDistance); // else if (near_z > 2.0 * FrustrumMinNearZ && m_distance > DefaultDistance) {
near_z -= delta; // float delta = m_distance - DefaultDistance;
far_z -= delta; // set_distance(DefaultDistance);
} // near_z -= delta;
// far_z -= delta;
// }
return ret; return ret;
} }