mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 13:58:51 +02:00
Making the lean recovery use more tuneable parameters.
This commit is contained in:
parent
d9b50359a6
commit
b75de42802
2 changed files with 10 additions and 25 deletions
|
@ -112,23 +112,7 @@ void MyAvatar::updateTransmitter(float deltaTime) {
|
||||||
void MyAvatar::update(float deltaTime) {
|
void MyAvatar::update(float deltaTime) {
|
||||||
updateTransmitter(deltaTime);
|
updateTransmitter(deltaTime);
|
||||||
|
|
||||||
// TODO: resurrect touch interactions between avatars
|
updateFromGyros(deltaTime);
|
||||||
//// rotate body yaw for yaw received from multitouch
|
|
||||||
//setOrientation(getOrientation() * glm::quat(glm::vec3(0, _yawFromTouch, 0)));
|
|
||||||
//_yawFromTouch = 0.f;
|
|
||||||
//
|
|
||||||
//// apply pitch from touch
|
|
||||||
//_head.setPitch(_head.getPitch() + _pitchFromTouch);
|
|
||||||
//_pitchFromTouch = 0.0f;
|
|
||||||
//
|
|
||||||
//float TOUCH_YAW_SCALE = -0.25f;
|
|
||||||
//float TOUCH_PITCH_SCALE = -12.5f;
|
|
||||||
//float FIXED_TOUCH_TIMESTEP = 0.016f;
|
|
||||||
//_yawFromTouch += ((_touchAvgX - _lastTouchAvgX) * TOUCH_YAW_SCALE * FIXED_TOUCH_TIMESTEP);
|
|
||||||
//_pitchFromTouch += ((_touchAvgY - _lastTouchAvgY) * TOUCH_PITCH_SCALE * FIXED_TOUCH_TIMESTEP);
|
|
||||||
|
|
||||||
// Update my avatar's state from gyros
|
|
||||||
updateFromGyros(Menu::getInstance()->isOptionChecked(MenuOption::TurnWithHead));
|
|
||||||
|
|
||||||
// Update head mouse from faceshift if active
|
// Update head mouse from faceshift if active
|
||||||
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
||||||
|
@ -364,7 +348,7 @@ void MyAvatar::simulate(float deltaTime) {
|
||||||
const float MAX_PITCH = 90.0f;
|
const float MAX_PITCH = 90.0f;
|
||||||
|
|
||||||
// Update avatar head rotation with sensor data
|
// Update avatar head rotation with sensor data
|
||||||
void MyAvatar::updateFromGyros(bool turnWithHead) {
|
void MyAvatar::updateFromGyros(float deltaTime) {
|
||||||
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
||||||
glm::vec3 estimatedPosition, estimatedRotation;
|
glm::vec3 estimatedPosition, estimatedRotation;
|
||||||
|
|
||||||
|
@ -372,7 +356,7 @@ void MyAvatar::updateFromGyros(bool turnWithHead) {
|
||||||
estimatedPosition = faceshift->getHeadTranslation();
|
estimatedPosition = faceshift->getHeadTranslation();
|
||||||
estimatedRotation = safeEulerAngles(faceshift->getHeadRotation());
|
estimatedRotation = safeEulerAngles(faceshift->getHeadRotation());
|
||||||
// Rotate the body if the head is turned beyond the screen
|
// Rotate the body if the head is turned beyond the screen
|
||||||
if (turnWithHead) {
|
if (Menu::getInstance()->isOptionChecked(MenuOption::TurnWithHead)) {
|
||||||
const float FACESHIFT_YAW_TURN_SENSITIVITY = 0.5f;
|
const float FACESHIFT_YAW_TURN_SENSITIVITY = 0.5f;
|
||||||
const float FACESHIFT_MIN_YAW_TURN = 15.f;
|
const float FACESHIFT_MIN_YAW_TURN = 15.f;
|
||||||
const float FACESHIFT_MAX_YAW_TURN = 50.f;
|
const float FACESHIFT_MAX_YAW_TURN = 50.f;
|
||||||
|
@ -387,11 +371,12 @@ void MyAvatar::updateFromGyros(bool turnWithHead) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// restore rotation, lean to neutral positions
|
// restore rotation, lean to neutral positions
|
||||||
const float RESTORE_RATE = 0.05f;
|
const float RESTORE_PERIOD = 1.f; // seconds
|
||||||
_head.setYaw(glm::mix(_head.getYaw(), 0.0f, RESTORE_RATE));
|
float restorePercentage = glm::clamp(deltaTime/RESTORE_PERIOD, 0.f, 1.f);
|
||||||
_head.setRoll(glm::mix(_head.getRoll(), 0.0f, RESTORE_RATE));
|
_head.setYaw(glm::mix(_head.getYaw(), 0.0f, restorePercentage));
|
||||||
_head.setLeanSideways(glm::mix(_head.getLeanSideways(), 0.0f, RESTORE_RATE));
|
_head.setRoll(glm::mix(_head.getRoll(), 0.0f, restorePercentage));
|
||||||
_head.setLeanForward(glm::mix(_head.getLeanForward(), 0.0f, RESTORE_RATE));
|
_head.setLeanSideways(glm::mix(_head.getLeanSideways(), 0.0f, restorePercentage));
|
||||||
|
_head.setLeanForward(glm::mix(_head.getLeanForward(), 0.0f, restorePercentage));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ public:
|
||||||
void reset();
|
void reset();
|
||||||
void update(float deltaTime);
|
void update(float deltaTime);
|
||||||
void simulate(float deltaTime);
|
void simulate(float deltaTime);
|
||||||
void updateFromGyros(bool turnWithHead);
|
void updateFromGyros(float deltaTime);
|
||||||
void updateTransmitter(float deltaTime);
|
void updateTransmitter(float deltaTime);
|
||||||
|
|
||||||
void render(bool forceRenderHead);
|
void render(bool forceRenderHead);
|
||||||
|
|
Loading…
Reference in a new issue