mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 11:17:34 +02:00
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:
commit
00773b4b12
2 changed files with 52 additions and 16 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue