Merge pull request #12270 from sethalves/warn-for-head-position-nan-for-rc-63

Warn for head position nan for rc 63
This commit is contained in:
John Conklin II 2018-01-26 14:16:30 -08:00 committed by GitHub
commit 00773b4b12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 16 deletions

View file

@ -561,6 +561,12 @@ void MyAvatar::simulate(float deltaTime) {
if (!_skeletonModel->getHeadPosition(headPosition)) { if (!_skeletonModel->getHeadPosition(headPosition)) {
headPosition = getWorldPosition(); headPosition = getWorldPosition();
} }
if (isNaN(headPosition)) {
qCDebug(interfaceapp) << "MyAvatar::simulate headPosition is NaN";
headPosition = glm::vec3(0.0f);
}
head->setPosition(headPosition); head->setPosition(headPosition);
head->setScale(getModelScale()); head->setScale(getModelScale());
head->simulate(deltaTime); head->simulate(deltaTime);
@ -2700,27 +2706,48 @@ void MyAvatar::setWalkSpeed(float value) {
} }
glm::vec3 MyAvatar::getPositionForAudio() { glm::vec3 MyAvatar::getPositionForAudio() {
glm::vec3 result;
switch (_audioListenerMode) { switch (_audioListenerMode) {
case AudioListenerMode::FROM_HEAD: case AudioListenerMode::FROM_HEAD:
return getHead()->getPosition(); result = getHead()->getPosition();
break;
case AudioListenerMode::FROM_CAMERA: case AudioListenerMode::FROM_CAMERA:
return qApp->getCamera().getPosition(); result = qApp->getCamera().getPosition();
break;
case AudioListenerMode::CUSTOM: case AudioListenerMode::CUSTOM:
return _customListenPosition; result = _customListenPosition;
break;
} }
return vec3();
if (isNaN(result)) {
qCDebug(interfaceapp) << "MyAvatar::getPositionForAudio produced NaN" << _audioListenerMode;
result = glm::vec3(0.0f);
}
return result;
} }
glm::quat MyAvatar::getOrientationForAudio() { glm::quat MyAvatar::getOrientationForAudio() {
glm::quat result;
switch (_audioListenerMode) { switch (_audioListenerMode) {
case AudioListenerMode::FROM_HEAD: case AudioListenerMode::FROM_HEAD:
return getHead()->getFinalOrientationInWorldFrame(); result = getHead()->getFinalOrientationInWorldFrame();
break;
case AudioListenerMode::FROM_CAMERA: case AudioListenerMode::FROM_CAMERA:
return qApp->getCamera().getOrientation(); result = qApp->getCamera().getOrientation();
break;
case AudioListenerMode::CUSTOM: case AudioListenerMode::CUSTOM:
return _customListenOrientation; result = _customListenOrientation;
break;
} }
return quat();
if (isNaN(result)) {
qCDebug(interfaceapp) << "MyAvatar::getOrientationForAudio produced NaN" << _audioListenerMode;
result = glm::quat();
}
return result;
} }
void MyAvatar::setAudioListenerMode(AudioListenerMode audioListenerMode) { void MyAvatar::setAudioListenerMode(AudioListenerMode audioListenerMode) {

View file

@ -445,22 +445,31 @@ void Rig::setJointRotation(int index, bool valid, const glm::quat& rotation, flo
} }
bool Rig::getJointPositionInWorldFrame(int jointIndex, glm::vec3& position, glm::vec3 translation, glm::quat rotation) const { bool Rig::getJointPositionInWorldFrame(int jointIndex, glm::vec3& position, glm::vec3 translation, glm::quat rotation) const {
bool success { false };
if (QThread::currentThread() == thread()) { if (QThread::currentThread() == thread()) {
if (isIndexValid(jointIndex)) { if (isIndexValid(jointIndex)) {
position = (rotation * _internalPoseSet._absolutePoses[jointIndex].trans()) + translation; position = (rotation * _internalPoseSet._absolutePoses[jointIndex].trans()) + translation;
return true; success = true;
} else { } else {
return false; success = false;
}
} else {
QReadLocker readLock(&_externalPoseSetLock);
if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) {
position = (rotation * _externalPoseSet._absolutePoses[jointIndex].trans()) + translation;
success = true;
} else {
success = false;
} }
} }
QReadLocker readLock(&_externalPoseSetLock); if (isNaN(position)) {
if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) { qCWarning(animation) << "Rig::getJointPositionInWorldFrame produces NaN";
position = (rotation * _externalPoseSet._absolutePoses[jointIndex].trans()) + translation; success = false;
return true; position = glm::vec3(0.0f);
} else {
return false;
} }
return success;
} }
bool Rig::getJointPosition(int jointIndex, glm::vec3& position) const { bool Rig::getJointPosition(int jointIndex, glm::vec3& position) const {