mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 00:56:45 +02:00
Refactorting, up/down attenuation and comments
This commit is contained in:
parent
3b8d3f987d
commit
1f458d195e
2 changed files with 36 additions and 28 deletions
|
@ -3433,32 +3433,45 @@ void MyAvatar::updateOrientation(float deltaTime) {
|
||||||
head->setBaseYaw(YAW(euler));
|
head->setBaseYaw(YAW(euler));
|
||||||
head->setBasePitch(PITCH(euler));
|
head->setBasePitch(PITCH(euler));
|
||||||
head->setBaseRoll(ROLL(euler));
|
head->setBaseRoll(ROLL(euler));
|
||||||
} else if (qApp->getCamera().getMode() != CAMERA_MODE_LOOK_AT) {
|
} else if (qApp->getCamera().getMode() == CAMERA_MODE_LOOK_AT) {
|
||||||
head->setBaseYaw(0.0f);
|
// Reset head orientation before applying the blending offset
|
||||||
head->setBasePitch(getHead()->getBasePitch() + getDriveKey(PITCH) * _pitchSpeed * deltaTime
|
|
||||||
+ getDriveKey(DELTA_PITCH) * _pitchSpeed / PITCH_SPEED_DEFAULT);
|
|
||||||
head->setBaseRoll(0.0f);
|
|
||||||
} else {
|
|
||||||
head->setBaseYaw(0.0f);
|
head->setBaseYaw(0.0f);
|
||||||
head->setBasePitch(0.0f);
|
head->setBasePitch(0.0f);
|
||||||
head->setBaseRoll(0.0f);
|
head->setBaseRoll(0.0f);
|
||||||
/*
|
// Attenuate head pitch
|
||||||
if (_rigEnabled) {
|
glm::vec3 cameraVector = (faceForward ? _lookAtOffsetPitch * getWorldOrientation() : getLookAtOffset()) * Vectors::UNIT_Z;
|
||||||
glm::vec3 avatarXVector = getWorldOrientation() * Vectors::UNIT_X;
|
glm::vec3 cameraYawVector = _lookAtOffsetYaw * Vectors::UNIT_Z;
|
||||||
glm::vec3 avatarZVector = getWorldOrientation() * Vectors::UNIT_Z;
|
float upDownDirection = glm::dot(cameraVector, Vectors::UNIT_Y);
|
||||||
glm::vec3 cameraZVector = _lookAtOffsetYaw * Vectors::UNIT_Z;
|
float upDownValue = abs(upDownDirection);
|
||||||
float xOffset = glm::dot(avatarXVector, cameraZVector);
|
const float LOOK_UP_MIN_DOT = 0.25f;
|
||||||
float yOffset = glm::dot(avatarZVector, cameraZVector);
|
const float LOOK_DOWN_MIN_DOT = 0.75f;
|
||||||
const QString HEAD_BLENDING_NAME = "lookAroundAlpha";
|
if (upDownDirection < 0.0f) {
|
||||||
const QString HEAD_ALPHA_NAME = "additiveBlendAlpha";
|
float lookUpAttenuation = upDownValue > LOOK_UP_MIN_DOT ? (upDownValue - LOOK_UP_MIN_DOT) / (1.0f - LOOK_UP_MIN_DOT) : 0.0f;
|
||||||
_skeletonModel->getRig().setDirectionalBlending(HEAD_BLENDING_NAME, glm::vec3(-xOffset, -0.2*yOffset, 0.0f), HEAD_ALPHA_NAME, 1.0f);
|
cameraVector = glm::mix(cameraVector, cameraYawVector, 1.0f - lookUpAttenuation);
|
||||||
|
} else {
|
||||||
|
float lookDownAttenuation = upDownValue > LOOK_DOWN_MIN_DOT ? (upDownValue - LOOK_DOWN_MIN_DOT) / (1.0f - LOOK_DOWN_MIN_DOT) : 0.0f;
|
||||||
|
cameraVector = glm::mix(cameraVector, cameraYawVector, 1.0f - lookDownAttenuation);
|
||||||
}
|
}
|
||||||
*/
|
// Calculate the camera target point.
|
||||||
glm::vec3 cameraVector = getLookAtOffset() * Vectors::UNIT_Z;
|
|
||||||
glm::vec3 cameraPos = qApp->getCamera().getPosition();
|
glm::vec3 cameraPos = qApp->getCamera().getPosition();
|
||||||
float distanceTargetFromCamera = 2.0f * glm::length(cameraPos - getWorldPosition());
|
float distanceTargetFromCamera = 2.0f * glm::length(cameraPos - getWorldPosition());
|
||||||
glm::vec3 targetPoint = qApp->getCamera().getPosition() + distanceTargetFromCamera * cameraVector;
|
glm::vec3 targetPoint = qApp->getCamera().getPosition() + distanceTargetFromCamera * cameraVector;
|
||||||
QMetaObject::invokeMethod(this, "headLookAt", Q_ARG(const glm::vec3&, targetPoint));
|
|
||||||
|
const float LOOKAT_MIX_ALPHA = 0.05f;
|
||||||
|
const float FPS = 60.0f;
|
||||||
|
|
||||||
|
// Approximate the head's look at vector to the camera look at vector with some delay.
|
||||||
|
float mixAlpha = LOOKAT_MIX_ALPHA * deltaTime * FPS;
|
||||||
|
mixAlpha = targetSpeed != 0.0f ? mixAlpha * abs(targetSpeed) / _yawSpeed : mixAlpha;
|
||||||
|
_lookAtCameraTarget = glm::mix(_lookAtCameraTarget, targetPoint, mixAlpha);
|
||||||
|
|
||||||
|
// Set the head look at target
|
||||||
|
QMetaObject::invokeMethod(this, "headLookAt", Q_ARG(const glm::vec3&, _lookAtCameraTarget));
|
||||||
|
} else {
|
||||||
|
head->setBaseYaw(0.0f);
|
||||||
|
head->setBasePitch(getHead()->getBasePitch() + getDriveKey(PITCH) * _pitchSpeed * deltaTime
|
||||||
|
+ getDriveKey(DELTA_PITCH) * _pitchSpeed / PITCH_SPEED_DEFAULT);
|
||||||
|
head->setBaseRoll(0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6348,6 +6361,7 @@ void MyAvatar::headLookAt(const glm::vec3& lookAtTarget) {
|
||||||
if (glm::length(headToTargetVector) > EPSILON) {
|
if (glm::length(headToTargetVector) > EPSILON) {
|
||||||
headToTargetVector = glm::normalize(headToTargetVector);
|
headToTargetVector = glm::normalize(headToTargetVector);
|
||||||
} else {
|
} else {
|
||||||
|
// The target point is the avatar head
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
float xOffset = -glm::dot(avatarXVector, headToTargetVector);
|
float xOffset = -glm::dot(avatarXVector, headToTargetVector);
|
||||||
|
@ -6355,14 +6369,8 @@ void MyAvatar::headLookAt(const glm::vec3& lookAtTarget) {
|
||||||
const QString HEAD_BLENDING_NAME = "lookAroundAlpha";
|
const QString HEAD_BLENDING_NAME = "lookAroundAlpha";
|
||||||
const QString HEAD_ALPHA_NAME = "additiveBlendAlpha";
|
const QString HEAD_ALPHA_NAME = "additiveBlendAlpha";
|
||||||
const float HEAD_ALPHA_BLENDING = 1.0f;
|
const float HEAD_ALPHA_BLENDING = 1.0f;
|
||||||
const float LOOK_UP_ATTENUATION = 0.75f;
|
glm::vec3 lookAtBlend = glm::vec3(xOffset, yOffset, 0.0f);
|
||||||
const float LOOK_DOWN_ATTENUATION = 0.25f;
|
_skeletonModel->getRig().setDirectionalBlending(HEAD_BLENDING_NAME, lookAtBlend,
|
||||||
const float LOOK_AT_TAU = 0.2f;
|
|
||||||
yOffset = yOffset > 0 ? LOOK_UP_ATTENUATION * yOffset : LOOK_DOWN_ATTENUATION * yOffset;
|
|
||||||
_lookAtBlend = _lookAtBlend + LOOK_AT_TAU * (glm::vec3(xOffset, yOffset, 0.0f) - _lookAtBlend);
|
|
||||||
|
|
||||||
|
|
||||||
_skeletonModel->getRig().setDirectionalBlending(HEAD_BLENDING_NAME, _lookAtBlend,
|
|
||||||
HEAD_ALPHA_NAME, HEAD_ALPHA_BLENDING);
|
HEAD_ALPHA_NAME, HEAD_ALPHA_BLENDING);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2629,7 +2629,7 @@ private:
|
||||||
|
|
||||||
glm::quat _lookAtOffsetPitch;
|
glm::quat _lookAtOffsetPitch;
|
||||||
glm::quat _lookAtOffsetYaw;
|
glm::quat _lookAtOffsetYaw;
|
||||||
glm::vec3 _lookAtBlend;
|
glm::vec3 _lookAtCameraTarget;
|
||||||
|
|
||||||
Setting::Handle<float> _realWorldFieldOfView;
|
Setting::Handle<float> _realWorldFieldOfView;
|
||||||
Setting::Handle<bool> _useAdvancedMovementControls;
|
Setting::Handle<bool> _useAdvancedMovementControls;
|
||||||
|
|
Loading…
Reference in a new issue