diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 85e4e9c94f..51e1249bd9 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -894,7 +894,21 @@ void Model::setScaleToFit(bool scaleToFit, const glm::vec3& dimensions) { } void Model::setScaleToFit(bool scaleToFit, float largestDimension) { - setScaleToFit(scaleToFit, glm::vec3(largestDimension, largestDimension, largestDimension)); + if (_scaleToFit != scaleToFit || glm::length(_scaleToFitDimensions) != largestDimension) { + _scaleToFit = scaleToFit; + + // we only need to do this work if we're "turning on" scale to fit. + if (scaleToFit) { + Extents modelMeshExtents = getUnscaledMeshExtents(); + float maxDimension = glm::distance(modelMeshExtents.maximum, modelMeshExtents.minimum); + float maxScale = largestDimension / maxDimension; + glm::vec3 modelMeshDimensions = modelMeshExtents.maximum - modelMeshExtents.minimum; + glm::vec3 dimensions = modelMeshDimensions * maxScale; + + _scaleToFitDimensions = dimensions; + _scaledToFit = false; // force rescaling + } + } } void Model::scaleToFit() {