Merge pull request #7770 from AndrewMeadows/avoid-crosseyes

don't cross the eyes
This commit is contained in:
Brad Hefta-Gaub 2016-05-02 10:13:25 -07:00
commit a447ce4633
2 changed files with 14 additions and 6 deletions

View file

@ -85,12 +85,23 @@ Rig::CharacterControllerState convertCharacterControllerState(CharacterControlle
}; };
} }
// Called within Model::simulate call, below. // Called within Model::simulate call, below.
void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
const FBXGeometry& geometry = getFBXGeometry(); const FBXGeometry& geometry = getFBXGeometry();
Head* head = _owningAvatar->getHead(); Head* head = _owningAvatar->getHead();
// make sure lookAt is not too close to face (avoid crosseyes)
glm::vec3 lookAt = _owningAvatar->isMyAvatar() ? head->getLookAtPosition() : head->getCorrectedLookAtPosition();
glm::vec3 focusOffset = lookAt - _owningAvatar->getHead()->getEyePosition();
float focusDistance = glm::length(focusOffset);
const float MIN_LOOK_AT_FOCUS_DISTANCE = 1.0f;
if (focusDistance < MIN_LOOK_AT_FOCUS_DISTANCE && focusDistance > EPSILON) {
lookAt = _owningAvatar->getHead()->getEyePosition() + (MIN_LOOK_AT_FOCUS_DISTANCE / focusDistance) * focusOffset;
}
if (_owningAvatar->isMyAvatar()) { if (_owningAvatar->isMyAvatar()) {
MyAvatar* myAvatar = static_cast<MyAvatar*>(_owningAvatar); MyAvatar* myAvatar = static_cast<MyAvatar*>(_owningAvatar);
@ -164,7 +175,7 @@ void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
Rig::EyeParameters eyeParams; Rig::EyeParameters eyeParams;
eyeParams.worldHeadOrientation = headParams.worldHeadOrientation; eyeParams.worldHeadOrientation = headParams.worldHeadOrientation;
eyeParams.eyeLookAt = head->getLookAtPosition(); eyeParams.eyeLookAt = lookAt;
eyeParams.eyeSaccade = head->getSaccade(); eyeParams.eyeSaccade = head->getSaccade();
eyeParams.modelRotation = getRotation(); eyeParams.modelRotation = getRotation();
eyeParams.modelTranslation = getTranslation(); eyeParams.modelTranslation = getTranslation();
@ -196,8 +207,8 @@ void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
Rig::EyeParameters eyeParams; Rig::EyeParameters eyeParams;
eyeParams.worldHeadOrientation = head->getFinalOrientationInWorldFrame(); eyeParams.worldHeadOrientation = head->getFinalOrientationInWorldFrame();
eyeParams.eyeLookAt = head->getCorrectedLookAtPosition(); eyeParams.eyeLookAt = lookAt;
eyeParams.eyeSaccade = glm::vec3(); eyeParams.eyeSaccade = glm::vec3(0.0f);
eyeParams.modelRotation = getRotation(); eyeParams.modelRotation = getRotation();
eyeParams.modelTranslation = getTranslation(); eyeParams.modelTranslation = getTranslation();
eyeParams.leftEyeJointIndex = geometry.leftEyeJointIndex; eyeParams.leftEyeJointIndex = geometry.leftEyeJointIndex;

View file

@ -203,8 +203,6 @@ public:
// rig space // rig space
bool getModelRegistrationPoint(glm::vec3& modelRegistrationPointOut) const; bool getModelRegistrationPoint(glm::vec3& modelRegistrationPointOut) const;
const glm::vec3& getEyesInRootFrame() const { return _eyesInRootFrame; }
// rig space // rig space
AnimPose getAbsoluteDefaultPose(int index) const; AnimPose getAbsoluteDefaultPose(int index) const;
@ -275,7 +273,6 @@ protected:
glm::vec3 _lastFront; glm::vec3 _lastFront;
glm::vec3 _lastPosition; glm::vec3 _lastPosition;
glm::vec3 _lastVelocity; glm::vec3 _lastVelocity;
glm::vec3 _eyesInRootFrame { Vectors::ZERO };
QUrl _animGraphURL; QUrl _animGraphURL;
std::shared_ptr<AnimNode> _animNode; std::shared_ptr<AnimNode> _animNode;