mirror of
https://github.com/overte-org/overte.git
synced 2025-08-11 00:53:17 +02:00
Move changes to Head and remove leftover code
This commit is contained in:
parent
a4fcb2c39e
commit
bb0849d3a0
7 changed files with 47 additions and 53 deletions
|
@ -2191,20 +2191,15 @@ void MyAvatar::computeMyLookAtTarget(const AvatarHash& hash) {
|
||||||
foreach (const AvatarSharedPointer& avatarData, hash) {
|
foreach (const AvatarSharedPointer& avatarData, hash) {
|
||||||
std::shared_ptr<Avatar> avatar = std::static_pointer_cast<Avatar>(avatarData);
|
std::shared_ptr<Avatar> avatar = std::static_pointer_cast<Avatar>(avatarData);
|
||||||
if (!avatar->isMyAvatar() && avatar->isInitialized()) {
|
if (!avatar->isMyAvatar() && avatar->isInitialized()) {
|
||||||
if (_forceTargetAvatarID.isNull() || avatar->getID() != _forceTargetAvatarID) {
|
glm::vec3 otherForward = avatar->getHeadJointFrontVector();
|
||||||
glm::vec3 otherForward = avatar->getHeadJointFrontVector();
|
glm::vec3 otherPosition = avatar->getHead()->getEyePosition();
|
||||||
glm::vec3 otherPosition = avatar->getHead()->getEyePosition();
|
const float TIME_WITHOUT_TALKING_THRESHOLD = 1.0f;
|
||||||
const float TIME_WITHOUT_TALKING_THRESHOLD = 1.0f;
|
bool otherIsTalking = avatar->getHead()->getTimeWithoutTalking() <= TIME_WITHOUT_TALKING_THRESHOLD;
|
||||||
bool otherIsTalking = avatar->getHead()->getTimeWithoutTalking() <= TIME_WITHOUT_TALKING_THRESHOLD;
|
bool lookingAtOtherAlready = _lookAtTargetAvatar.lock().get() == avatar.get();
|
||||||
bool lookingAtOtherAlready = _lookAtTargetAvatar.lock().get() == avatar.get();
|
float cost = lookAtCostFunction(myForward, myPosition, otherForward, otherPosition, otherIsTalking, lookingAtOtherAlready);
|
||||||
float cost = lookAtCostFunction(myForward, myPosition, otherForward, otherPosition, otherIsTalking, lookingAtOtherAlready);
|
if (cost < bestCost) {
|
||||||
if (cost < bestCost) {
|
bestCost = cost;
|
||||||
bestCost = cost;
|
|
||||||
bestAvatar = avatar;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
bestAvatar = avatar;
|
bestAvatar = avatar;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6652,7 +6647,7 @@ void MyAvatar::updateEyesLookAtPosition(FaceTracker* faceTracker, Camera& myCame
|
||||||
} else if (_scriptControlsEyesLookAt) {
|
} else if (_scriptControlsEyesLookAt) {
|
||||||
if (_scriptEyesControlTimer < MAX_LOOK_AT_TIME_SCRIPT_CONTROL) {
|
if (_scriptEyesControlTimer < MAX_LOOK_AT_TIME_SCRIPT_CONTROL) {
|
||||||
_scriptEyesControlTimer += deltaTime;
|
_scriptEyesControlTimer += deltaTime;
|
||||||
lookAtSpot = _eyesLookAtTarget;
|
lookAtSpot = _eyesLookAtTarget.get();
|
||||||
} else {
|
} else {
|
||||||
_scriptControlsEyesLookAt = false;
|
_scriptControlsEyesLookAt = false;
|
||||||
}
|
}
|
||||||
|
@ -6740,7 +6735,7 @@ void MyAvatar::updateEyesLookAtPosition(FaceTracker* faceTracker, Camera& myCame
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_eyesLookAtTarget = lookAtSpot;
|
_eyesLookAtTarget.set(lookAtSpot);
|
||||||
getHead()->setLookAtPosition(lookAtSpot);
|
getHead()->setLookAtPosition(lookAtSpot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6829,7 +6824,7 @@ void MyAvatar::setEyesLookAt(const glm::vec3& lookAtTarget) {
|
||||||
Q_ARG(const glm::vec3&, lookAtTarget));
|
Q_ARG(const glm::vec3&, lookAtTarget));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_eyesLookAtTarget = lookAtTarget;
|
_eyesLookAtTarget.set(lookAtTarget);
|
||||||
_scriptEyesControlTimer = 0.0f;
|
_scriptEyesControlTimer = 0.0f;
|
||||||
_scriptControlsEyesLookAt = true;
|
_scriptControlsEyesLookAt = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1780,7 +1780,7 @@ public:
|
||||||
* @function MyAvatar.getEyesLookAt
|
* @function MyAvatar.getEyesLookAt
|
||||||
* @returns {Vec3} The eyes's look at target in world coordinates.
|
* @returns {Vec3} The eyes's look at target in world coordinates.
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE glm::vec3 getEyesLookAt() { return _eyesLookAtTarget; }
|
Q_INVOKABLE glm::vec3 getEyesLookAt() { return _eyesLookAtTarget.get(); }
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Aims the pointing directional blending towards the provided target point.
|
* Aims the pointing directional blending towards the provided target point.
|
||||||
|
@ -2672,13 +2672,12 @@ private:
|
||||||
|
|
||||||
AvatarWeakPointer _lookAtTargetAvatar;
|
AvatarWeakPointer _lookAtTargetAvatar;
|
||||||
glm::vec3 _targetAvatarPosition;
|
glm::vec3 _targetAvatarPosition;
|
||||||
QUuid _forceTargetAvatarID;
|
|
||||||
bool _shouldRender { true };
|
bool _shouldRender { true };
|
||||||
float _oculusYawOffset;
|
float _oculusYawOffset;
|
||||||
|
|
||||||
eyeContactTarget _eyeContactTarget;
|
eyeContactTarget _eyeContactTarget;
|
||||||
float _eyeContactTargetTimer { 0.0f };
|
float _eyeContactTargetTimer { 0.0f };
|
||||||
glm::vec3 _eyesLookAtTarget;
|
ThreadSafeValueCache<glm::vec3> _eyesLookAtTarget { glm::vec3() };
|
||||||
bool _scriptControlsEyesLookAt{ false };
|
bool _scriptControlsEyesLookAt{ false };
|
||||||
float _scriptEyesControlTimer{ 0.0f };
|
float _scriptEyesControlTimer{ 0.0f };
|
||||||
|
|
||||||
|
|
|
@ -355,3 +355,24 @@ float Head::getFinalPitch() const {
|
||||||
float Head::getFinalRoll() const {
|
float Head::getFinalRoll() const {
|
||||||
return glm::clamp(_baseRoll + _deltaRoll, MIN_HEAD_ROLL, MAX_HEAD_ROLL);
|
return glm::clamp(_baseRoll + _deltaRoll, MIN_HEAD_ROLL, MAX_HEAD_ROLL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Head::setLookAtPosition(const glm::vec3& lookAtPosition) {
|
||||||
|
if (_isEyeLookAtUpdated && _requestLookAtPosition != lookAtPosition) {
|
||||||
|
_lookAtPositionChanged = usecTimestampNow();
|
||||||
|
glm::vec3 oldAvatarLookAtVector = _requestLookAtPosition - _owningAvatar->getWorldPosition();
|
||||||
|
glm::vec3 newAvatarLookAtVector = lookAtPosition - _owningAvatar->getWorldPosition();
|
||||||
|
const float MIN_BLINK_ANGLE = 0.35f; // 20 degrees
|
||||||
|
_forceBlinkToRetarget = angleBetween(oldAvatarLookAtVector, newAvatarLookAtVector) > MIN_BLINK_ANGLE;
|
||||||
|
if (_forceBlinkToRetarget) {
|
||||||
|
_isEyeLookAtUpdated = false;
|
||||||
|
} else {
|
||||||
|
_lookAtPosition = lookAtPosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_requestLookAtPosition = lookAtPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Head::updateEyeLookAt() {
|
||||||
|
_lookAtPosition = _requestLookAtPosition;
|
||||||
|
_isEyeLookAtUpdated = true;
|
||||||
|
}
|
||||||
|
|
|
@ -79,6 +79,9 @@ public:
|
||||||
|
|
||||||
float getTimeWithoutTalking() const { return _timeWithoutTalking; }
|
float getTimeWithoutTalking() const { return _timeWithoutTalking; }
|
||||||
|
|
||||||
|
virtual void setLookAtPosition(const glm::vec3& lookAtPosition) override;
|
||||||
|
void updateEyeLookAt();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// disallow copies of the Head, copy of owning Avatar is disallowed too
|
// disallow copies of the Head, copy of owning Avatar is disallowed too
|
||||||
Head(const Head&);
|
Head(const Head&);
|
||||||
|
@ -123,6 +126,10 @@ protected:
|
||||||
int _leftEyeLookAtID;
|
int _leftEyeLookAtID;
|
||||||
int _rightEyeLookAtID;
|
int _rightEyeLookAtID;
|
||||||
|
|
||||||
|
glm::vec3 _requestLookAtPosition;
|
||||||
|
bool _forceBlinkToRetarget { false };
|
||||||
|
bool _isEyeLookAtUpdated { false };
|
||||||
|
|
||||||
// private methods
|
// private methods
|
||||||
void calculateMouthShapes(float timeRatio);
|
void calculateMouthShapes(float timeRatio);
|
||||||
void applyEyelidOffset(glm::quat headOrientation);
|
void applyEyelidOffset(glm::quat headOrientation);
|
||||||
|
|
|
@ -1480,7 +1480,6 @@ public:
|
||||||
void setIsNewAvatar(bool isNewAvatar) { _isNewAvatar = isNewAvatar; }
|
void setIsNewAvatar(bool isNewAvatar) { _isNewAvatar = isNewAvatar; }
|
||||||
bool getIsNewAvatar() { return _isNewAvatar; }
|
bool getIsNewAvatar() { return _isNewAvatar; }
|
||||||
void setIsClientAvatar(bool isClientAvatar) { _isClientAvatar = isClientAvatar; }
|
void setIsClientAvatar(bool isClientAvatar) { _isClientAvatar = isClientAvatar; }
|
||||||
bool getIsClientAvatar() const { return _isClientAvatar; }
|
|
||||||
void setSkeletonData(const std::vector<AvatarSkeletonTrait::UnpackedJointData>& skeletonData);
|
void setSkeletonData(const std::vector<AvatarSkeletonTrait::UnpackedJointData>& skeletonData);
|
||||||
std::vector<AvatarSkeletonTrait::UnpackedJointData> getSkeletonData() const;
|
std::vector<AvatarSkeletonTrait::UnpackedJointData> getSkeletonData() const;
|
||||||
void sendSkeletonData() const;
|
void sendSkeletonData() const;
|
||||||
|
|
|
@ -234,30 +234,3 @@ void HeadData::setFaceTrackerConnected(bool value) {
|
||||||
_isFaceTrackerConnected = value;
|
_isFaceTrackerConnected = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeadData::setLookAtPosition(const glm::vec3& lookAtPosition) {
|
|
||||||
if (_owningAvatar->getIsClientAvatar() || _owningAvatar->isMyAvatar()) {
|
|
||||||
if (_isEyeLookAtUpdated && _requestLookAtPosition != lookAtPosition) {
|
|
||||||
_lookAtPositionChanged = usecTimestampNow();
|
|
||||||
glm::vec3 oldAvatarLookAtVector = _requestLookAtPosition - _owningAvatar->getWorldPosition();
|
|
||||||
glm::vec3 newAvatarLookAtVector = lookAtPosition - _owningAvatar->getWorldPosition();
|
|
||||||
const float MIN_BLINK_ANGLE = 0.35f; // 20 degrees
|
|
||||||
_forceBlinkToRetarget = angleBetween(oldAvatarLookAtVector, newAvatarLookAtVector) > MIN_BLINK_ANGLE;
|
|
||||||
if (_forceBlinkToRetarget) {
|
|
||||||
_isEyeLookAtUpdated = false;
|
|
||||||
} else {
|
|
||||||
_lookAtPosition = lookAtPosition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_requestLookAtPosition = lookAtPosition;
|
|
||||||
} else {
|
|
||||||
if (_lookAtPosition != lookAtPosition) {
|
|
||||||
_lookAtPositionChanged = usecTimestampNow();
|
|
||||||
}
|
|
||||||
_lookAtPosition = lookAtPosition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void HeadData::updateEyeLookAt() {
|
|
||||||
_lookAtPosition = _requestLookAtPosition;
|
|
||||||
_isEyeLookAtUpdated = true;
|
|
||||||
}
|
|
||||||
|
|
|
@ -64,7 +64,12 @@ public:
|
||||||
void setBlendshapeCoefficients(const QVector<float>& blendshapeCoefficients) { _blendshapeCoefficients = blendshapeCoefficients; }
|
void setBlendshapeCoefficients(const QVector<float>& blendshapeCoefficients) { _blendshapeCoefficients = blendshapeCoefficients; }
|
||||||
|
|
||||||
const glm::vec3& getLookAtPosition() const { return _lookAtPosition; }
|
const glm::vec3& getLookAtPosition() const { return _lookAtPosition; }
|
||||||
void setLookAtPosition(const glm::vec3& lookAtPosition);
|
virtual void setLookAtPosition(const glm::vec3& lookAtPosition) {
|
||||||
|
if (_lookAtPosition != lookAtPosition) {
|
||||||
|
_lookAtPositionChanged = usecTimestampNow();
|
||||||
|
}
|
||||||
|
_lookAtPosition = lookAtPosition;
|
||||||
|
}
|
||||||
bool lookAtPositionChangedSince(quint64 time) { return _lookAtPositionChanged >= time; }
|
bool lookAtPositionChangedSince(quint64 time) { return _lookAtPositionChanged >= time; }
|
||||||
|
|
||||||
bool getHasProceduralEyeFaceMovement() const;
|
bool getHasProceduralEyeFaceMovement() const;
|
||||||
|
@ -79,8 +84,6 @@ public:
|
||||||
void setFaceTrackerConnected(bool value);
|
void setFaceTrackerConnected(bool value);
|
||||||
bool getFaceTrackerConnected() const { return _isFaceTrackerConnected; }
|
bool getFaceTrackerConnected() const { return _isFaceTrackerConnected; }
|
||||||
|
|
||||||
void updateEyeLookAt();
|
|
||||||
|
|
||||||
friend class AvatarData;
|
friend class AvatarData;
|
||||||
|
|
||||||
QJsonObject toJson() const;
|
QJsonObject toJson() const;
|
||||||
|
@ -92,7 +95,6 @@ protected:
|
||||||
float _basePitch;
|
float _basePitch;
|
||||||
float _baseRoll;
|
float _baseRoll;
|
||||||
|
|
||||||
glm::vec3 _requestLookAtPosition;
|
|
||||||
glm::vec3 _lookAtPosition;
|
glm::vec3 _lookAtPosition;
|
||||||
quint64 _lookAtPositionChanged { 0 };
|
quint64 _lookAtPositionChanged { 0 };
|
||||||
|
|
||||||
|
@ -113,8 +115,6 @@ protected:
|
||||||
QVector<float> _summedBlendshapeCoefficients;
|
QVector<float> _summedBlendshapeCoefficients;
|
||||||
QMap<QString, int> _blendshapeLookupMap;
|
QMap<QString, int> _blendshapeLookupMap;
|
||||||
AvatarData* _owningAvatar;
|
AvatarData* _owningAvatar;
|
||||||
bool _forceBlinkToRetarget { false };
|
|
||||||
bool _isEyeLookAtUpdated { false };
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// privatize copy ctor and assignment operator so copies of this object cannot be made
|
// privatize copy ctor and assignment operator so copies of this object cannot be made
|
||||||
|
|
Loading…
Reference in a new issue