From 3f2c6504a60ff304adc4c454907f450e891a1aeb Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 13 Jan 2014 12:27:47 -0800 Subject: [PATCH 1/2] fix for avatar scale bug, closes #1506 --- interface/src/Application.cpp | 4 ++-- interface/src/avatar/Avatar.cpp | 4 ++-- libraries/avatars/src/AvatarData.cpp | 8 ++++---- libraries/avatars/src/AvatarData.h | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 958995daae..0830f6069f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2128,8 +2128,8 @@ void Application::updateAvatars(float deltaTime, glm::vec3 mouseRayOrigin, glm:: Avatar* avatar = *fade; const float SHRINK_RATE = 0.9f; avatar->setNewScale(avatar->getNewScale() * SHRINK_RATE); - const float MINIMUM_SCALE = 0.001f; - if (avatar->getNewScale() < MINIMUM_SCALE) { + + if (avatar->getNewScale() < MIN_AVATAR_SCALE) { delete avatar; _avatarFades.erase(fade--); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index b3b4793b39..525644b52b 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -439,14 +439,14 @@ void Avatar::goHome() { } void Avatar::increaseSize() { - if ((1.f + SCALING_RATIO) * _newScale < MAX_SCALE) { + if ((1.f + SCALING_RATIO) * _newScale < MAX_AVATAR_SCALE) { _newScale *= (1.f + SCALING_RATIO); qDebug("Changed scale to %f\n", _newScale); } } void Avatar::decreaseSize() { - if (MIN_SCALE < (1.f - SCALING_RATIO) * _newScale) { + if (MIN_AVATAR_SCALE < (1.f - SCALING_RATIO) * _newScale) { _newScale *= (1.f - SCALING_RATIO); qDebug("Changed scale to %f\n", _newScale); } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 14115ced47..b81a0601bd 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -297,10 +297,10 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { } void AvatarData::setNewScale(float newScale) { - if (newScale > MAX_SCALE) { - newScale = MAX_SCALE; - } else if (newScale < MIN_SCALE) { - newScale = MIN_SCALE; + if (newScale > MAX_AVATAR_SCALE) { + newScale = MAX_AVATAR_SCALE; + } else if (newScale < MIN_AVATAR_SCALE) { + newScale = MIN_AVATAR_SCALE; } _newScale = newScale; qDebug() << "Changed scale to " << _newScale << "\n"; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index e7f359aff2..6ee320eae0 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -32,8 +32,8 @@ const int HAND_STATE_START_BIT = 2; // 3rd and 4th bits const int IS_FACESHIFT_CONNECTED = 4; // 5th bit const int IS_CHAT_CIRCLING_ENABLED = 5; -static const float MAX_SCALE = 1000.f; -static const float MIN_SCALE = .005f; +static const float MAX_AVATAR_SCALE = 1000.f; +static const float MIN_AVATAR_SCALE = .005f; const float MAX_AUDIO_LOUDNESS = 1000.0; // close enough for mouth animation @@ -83,7 +83,7 @@ public: // Scale float getNewScale() const { return _newScale; } - void setNewScale(float); + void setNewScale(float newScale); // Hand State void setHandState(char s) { _handState = s; } From 42e3bcfe9198500cc3eb503e312b56d42fccacd4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 13 Jan 2014 13:52:41 -0800 Subject: [PATCH 2/2] allow fade scale to get smaller than minimum avatar scale --- interface/src/Application.cpp | 9 ++++++--- interface/src/Menu.cpp | 2 +- interface/src/avatar/Avatar.cpp | 26 +++++++++++++------------- interface/src/avatar/MyAvatar.cpp | 12 ++++++------ libraries/avatars/src/AvatarData.cpp | 20 +++++++++----------- libraries/avatars/src/AvatarData.h | 7 ++++--- 6 files changed, 39 insertions(+), 37 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0830f6069f..5d808ff9d4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2127,9 +2127,12 @@ void Application::updateAvatars(float deltaTime, glm::vec3 mouseRayOrigin, glm:: for (vector::iterator fade = _avatarFades.begin(); fade != _avatarFades.end(); fade++) { Avatar* avatar = *fade; const float SHRINK_RATE = 0.9f; - avatar->setNewScale(avatar->getNewScale() * SHRINK_RATE); - - if (avatar->getNewScale() < MIN_AVATAR_SCALE) { + + avatar->setTargetScale(avatar->getScale() * SHRINK_RATE); + + const float MIN_FADE_SCALE = 0.001; + + if (avatar->getTargetScale() < MIN_FADE_SCALE) { delete avatar; _avatarFades.erase(fade--); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 545a765dce..209bc76472 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -891,7 +891,7 @@ void Menu::editPreferences() { _maxVoxelPacketsPerSecond = maxVoxelsPPS->value(); applicationInstance->getAvatar()->setLeanScale(leanScale->value()); - applicationInstance->getAvatar()->setNewScale(avatarScale->value()); + applicationInstance->getAvatar()->setClampedTargetScale(avatarScale->value()); _audioJitterBufferSamples = audioJitterBufferSamples->value(); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 525644b52b..25365dba7a 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -167,8 +167,8 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { follow(NULL); } - if (_scale != _newScale) { - setScale(_newScale); + if (_scale != _targetScale) { + setScale(_targetScale); } // copy velocity so we can use it later for acceleration @@ -439,30 +439,30 @@ void Avatar::goHome() { } void Avatar::increaseSize() { - if ((1.f + SCALING_RATIO) * _newScale < MAX_AVATAR_SCALE) { - _newScale *= (1.f + SCALING_RATIO); - qDebug("Changed scale to %f\n", _newScale); + if ((1.f + SCALING_RATIO) * _targetScale < MAX_AVATAR_SCALE) { + _targetScale *= (1.f + SCALING_RATIO); + qDebug("Changed scale to %f\n", _targetScale); } } void Avatar::decreaseSize() { - if (MIN_AVATAR_SCALE < (1.f - SCALING_RATIO) * _newScale) { - _newScale *= (1.f - SCALING_RATIO); - qDebug("Changed scale to %f\n", _newScale); + if (MIN_AVATAR_SCALE < (1.f - SCALING_RATIO) * _targetScale) { + _targetScale *= (1.f - SCALING_RATIO); + qDebug("Changed scale to %f\n", _targetScale); } } void Avatar::resetSize() { - _newScale = 1.0f; - qDebug("Reseted scale to %f\n", _newScale); + _targetScale = 1.0f; + qDebug("Reseted scale to %f\n", _targetScale); } void Avatar::setScale(const float scale) { _scale = scale; - if (_newScale * (1.f - RESCALING_TOLERANCE) < _scale && - _scale < _newScale * (1.f + RESCALING_TOLERANCE)) { - _scale = _newScale; + if (_targetScale * (1.f - RESCALING_TOLERANCE) < _scale && + _scale < _targetScale * (1.f + RESCALING_TOLERANCE)) { + _scale = _targetScale; } _skeleton.setScale(_scale); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 161ea5b9d8..dabbb7812d 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -92,12 +92,12 @@ void MyAvatar::simulate(float deltaTime, Transmitter* transmitter) { } // Ajust, scale, position and lookAt position when following an other avatar - if (_leadingAvatar && _newScale != _leadingAvatar->getScale()) { - _newScale = _leadingAvatar->getScale(); + if (_leadingAvatar && _targetScale != _leadingAvatar->getScale()) { + _targetScale = _leadingAvatar->getScale(); } - if (_scale != _newScale) { - float scale = (1.f - SMOOTHING_RATIO) * _scale + SMOOTHING_RATIO * _newScale; + if (_scale != _targetScale) { + float scale = (1.f - SMOOTHING_RATIO) * _scale + SMOOTHING_RATIO * _targetScale; setScale(scale); Application::getInstance()->getCamera()->setScale(scale); } @@ -513,7 +513,7 @@ void MyAvatar::saveData(QSettings* settings) { settings->setValue("pupilDilation", _head.getPupilDilation()); settings->setValue("leanScale", _leanScale); - settings->setValue("scale", _newScale); + settings->setValue("scale", _targetScale); settings->endGroup(); } @@ -536,7 +536,7 @@ void MyAvatar::loadData(QSettings* settings) { _leanScale = loadSetting(settings, "leanScale", 0.05f); - _newScale = loadSetting(settings, "scale", 1.0f); + _targetScale = loadSetting(settings, "scale", 1.0f); setScale(_scale); Application::getInstance()->getCamera()->setScale(_scale); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index b81a0601bd..f663f26cbf 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -29,7 +29,7 @@ AvatarData::AvatarData(Node* owningNode) : _bodyYaw(-90.0), _bodyPitch(0.0), _bodyRoll(0.0), - _newScale(1.0f), + _targetScale(1.0f), _leaderUUID(), _handState(0), _keyState(NO_KEY_DOWN), @@ -76,7 +76,7 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { destinationBuffer += packFloatAngleToTwoByte(destinationBuffer, _bodyRoll); // Body scale - destinationBuffer += packFloatRatioToTwoByte(destinationBuffer, _newScale); + destinationBuffer += packFloatRatioToTwoByte(destinationBuffer, _targetScale); // Follow mode info memcpy(destinationBuffer, _leaderUUID.toRfc4122().constData(), NUM_BYTES_RFC4122_UUID); @@ -198,7 +198,7 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { sourceBuffer += unpackFloatAngleFromTwoByte((uint16_t*) sourceBuffer, &_bodyRoll); // Body scale - sourceBuffer += unpackFloatRatioFromTwoByte(sourceBuffer, _newScale); + sourceBuffer += unpackFloatRatioFromTwoByte(sourceBuffer, _targetScale); // Follow mode info _leaderUUID = QUuid::fromRfc4122(QByteArray((char*) sourceBuffer, NUM_BYTES_RFC4122_UUID)); @@ -296,12 +296,10 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { return sourceBuffer - startPosition; } -void AvatarData::setNewScale(float newScale) { - if (newScale > MAX_AVATAR_SCALE) { - newScale = MAX_AVATAR_SCALE; - } else if (newScale < MIN_AVATAR_SCALE) { - newScale = MIN_AVATAR_SCALE; - } - _newScale = newScale; - qDebug() << "Changed scale to " << _newScale << "\n"; +void AvatarData::setClampedTargetScale(float targetScale) { + + targetScale = glm::clamp(targetScale, MIN_AVATAR_SCALE, MAX_AVATAR_SCALE); + + _targetScale = targetScale; + qDebug() << "Changed scale to " << _targetScale << "\n"; } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 6ee320eae0..8b46fd8493 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -82,8 +82,9 @@ public: void setBodyRoll(float bodyRoll) { _bodyRoll = bodyRoll; } // Scale - float getNewScale() const { return _newScale; } - void setNewScale(float newScale); + float getTargetScale() const { return _targetScale; } + void setTargetScale(float targetScale) { _targetScale = targetScale; } + void setClampedTargetScale(float targetScale); // Hand State void setHandState(char s) { _handState = s; } @@ -132,7 +133,7 @@ protected: float _bodyRoll; // Body scale - float _newScale; + float _targetScale; // Following mode infos QUuid _leaderUUID;