checking for NaN in cross products from vec3 positions

This commit is contained in:
Wayne Chen 2018-06-18 11:21:53 -07:00
parent ed7f008517
commit e381022910

View file

@ -41,9 +41,13 @@ bool Billboardable::pointTransformAtCamera(Transform& transform, glm::quat offse
glm::vec3 cameraPos = qApp->getCamera().getPosition();
// use the referencial from the avatar, y isn't always up
glm::vec3 avatarUP = DependencyManager::get<AvatarManager>()->getMyAvatar()->getWorldOrientation()*Vectors::UP;
glm::vec3 zeroPos{ 0.0f, 0.0f, 0.0f };
if (!(glm::all(glm::equal(cameraPos, zeroPos)) || glm::all(glm::equal(billboardPos, zeroPos)) ||
glm::all(glm::equal(avatarUP, zeroPos)))) {
// check to see if glm::lookAt will work / using glm::lookAt function names
glm::highp_vec3 s(glm::cross(billboardPos - cameraPos, avatarUP));
glm::highp_vec3 u(glm::cross(s, billboardPos - cameraPos));
// make sure s and u are not NaN for any component
if(glm::length2(s) > 0.0f && glm::length2(u) > 0.0f) {
glm::quat rotation(conjugate(toQuat(glm::lookAt(cameraPos, billboardPos, avatarUP))));
transform.setRotation(rotation);
transform.postRotate(offsetRotation);