From 77324ebb4635ec54fae225e763c8f33d97c7a3c3 Mon Sep 17 00:00:00 2001 From: Jeffrey Ventrella Date: Thu, 23 May 2013 10:14:46 -0700 Subject: [PATCH] made avatars appear to float above the ground --- interface/src/Avatar.cpp | 28 ++++++++++++++++------------ interface/src/Avatar.h | 1 + 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index 22466ec690..54f46eede3 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -52,6 +52,7 @@ const float PERIPERSONAL_RADIUS = 1.0f; const float AVATAR_BRAKING_STRENGTH = 40.0f; const float JOINT_TOUCH_RANGE = 0.0005f; const float ANGULAR_RIGHTING_SPEED = 45.0f; +const float FLOATING_HEIGHT = 0.13f; const bool USING_HEAD_LEAN = false; const float LEAN_SENSITIVITY = 0.15; @@ -86,6 +87,7 @@ Avatar::Avatar(bool isMine) : _maxArmLength(0.0f), _orientation(), _pelvisStandingHeight(0.0f), + _pelvisFloatingHeight(0.0f), _displayingHead(true), _distanceToNearestAvatar(std::numeric_limits::max()), _gravity(0.0f, -1.0f, 0.0f), @@ -604,8 +606,8 @@ void Avatar::updateCollisionWithEnvironment() { float radius = _height * 0.125f; glm::vec3 penetration; if (Application::getInstance()->getEnvironment()->findCapsulePenetration( - _position - glm::vec3(0.0f, _pelvisStandingHeight - radius, 0.0f), - _position + glm::vec3(0.0f, _height - _pelvisStandingHeight - radius, 0.0f), radius, penetration)) { + _position - glm::vec3(0.0f, _pelvisFloatingHeight - radius, 0.0f), + _position + glm::vec3(0.0f, _height - _pelvisFloatingHeight - radius, 0.0f), radius, penetration)) { applyCollisionWithScene(penetration); } } @@ -614,8 +616,8 @@ void Avatar::updateCollisionWithVoxels() { float radius = _height * 0.125f; glm::vec3 penetration; if (Application::getInstance()->getVoxels()->findCapsulePenetration( - _position - glm::vec3(0.0f, _pelvisStandingHeight - radius, 0.0f), - _position + glm::vec3(0.0f, _height - _pelvisStandingHeight - radius, 0.0f), radius, penetration)) { + _position - glm::vec3(0.0f, _pelvisFloatingHeight - radius, 0.0f), + _position + glm::vec3(0.0f, _height - _pelvisFloatingHeight - radius, 0.0f), radius, penetration)) { applyCollisionWithScene(penetration); } } @@ -867,14 +869,14 @@ void Avatar::initializeSkeleton() { _joint[ AVATAR_JOINT_RIGHT_FINGERTIPS ].defaultPosePosition = glm::vec3( 0.0, -0.1, 0.0 ); _joint[ AVATAR_JOINT_LEFT_HIP ].defaultPosePosition = glm::vec3( -0.05, 0.0, -0.02 ); - _joint[ AVATAR_JOINT_LEFT_KNEE ].defaultPosePosition = glm::vec3( 0.0, -0.27, 0.02 ); - _joint[ AVATAR_JOINT_LEFT_HEEL ].defaultPosePosition = glm::vec3( 0.0, -0.27, -0.01 ); - _joint[ AVATAR_JOINT_LEFT_TOES ].defaultPosePosition = glm::vec3( 0.0, 0.0, 0.05 ); + _joint[ AVATAR_JOINT_LEFT_KNEE ].defaultPosePosition = glm::vec3( 0.01, -0.25, 0.03 ); + _joint[ AVATAR_JOINT_LEFT_HEEL ].defaultPosePosition = glm::vec3( 0.01, -0.22, -0.08 ); + _joint[ AVATAR_JOINT_LEFT_TOES ].defaultPosePosition = glm::vec3( 0.00, -0.03, 0.05 ); _joint[ AVATAR_JOINT_RIGHT_HIP ].defaultPosePosition = glm::vec3( 0.05, 0.0, -0.02 ); - _joint[ AVATAR_JOINT_RIGHT_KNEE ].defaultPosePosition = glm::vec3( 0.0, -0.27, 0.02 ); - _joint[ AVATAR_JOINT_RIGHT_HEEL ].defaultPosePosition = glm::vec3( 0.0, -0.27, -0.01 ); - _joint[ AVATAR_JOINT_RIGHT_TOES ].defaultPosePosition = glm::vec3( 0.0, 0.0, 0.05 ); + _joint[ AVATAR_JOINT_RIGHT_KNEE ].defaultPosePosition = glm::vec3( -0.01, -0.25, 0.03 ); + _joint[ AVATAR_JOINT_RIGHT_HEEL ].defaultPosePosition = glm::vec3( -0.01, -0.22, -0.08 ); + _joint[ AVATAR_JOINT_RIGHT_TOES ].defaultPosePosition = glm::vec3( -0.00, -0.03, 0.05 ); // specify the radii of the joints _joint[ AVATAR_JOINT_PELVIS ].radius = 0.07; @@ -898,12 +900,12 @@ void Avatar::initializeSkeleton() { _joint[ AVATAR_JOINT_LEFT_HIP ].radius = 0.04; _joint[ AVATAR_JOINT_LEFT_KNEE ].radius = 0.025; _joint[ AVATAR_JOINT_LEFT_HEEL ].radius = 0.025; - _joint[ AVATAR_JOINT_LEFT_TOES ].radius = 0.027; + _joint[ AVATAR_JOINT_LEFT_TOES ].radius = 0.025; _joint[ AVATAR_JOINT_RIGHT_HIP ].radius = 0.04; _joint[ AVATAR_JOINT_RIGHT_KNEE ].radius = 0.025; _joint[ AVATAR_JOINT_RIGHT_HEEL ].radius = 0.025; - _joint[ AVATAR_JOINT_RIGHT_TOES ].radius = 0.027; + _joint[ AVATAR_JOINT_RIGHT_TOES ].radius = 0.025; // specify the tightness of the springy positions as far as attraction to rigid body _joint[ AVATAR_JOINT_PELVIS ].springBodyTightness = BODY_SPRING_DEFAULT_TIGHTNESS * 1.0; @@ -944,6 +946,8 @@ void Avatar::initializeSkeleton() { _joint[ AVATAR_JOINT_LEFT_KNEE ].length; //printf("_pelvisStandingHeight = %f\n", _pelvisStandingHeight); + _pelvisFloatingHeight = _pelvisStandingHeight + FLOATING_HEIGHT; + _height = ( _pelvisStandingHeight + diff --git a/interface/src/Avatar.h b/interface/src/Avatar.h index 446d6cfe2e..20fd580328 100644 --- a/interface/src/Avatar.h +++ b/interface/src/Avatar.h @@ -173,6 +173,7 @@ private: glm::quat _righting; int _driveKeys[MAX_DRIVE_KEYS]; float _pelvisStandingHeight; + float _pelvisFloatingHeight; float _height; Balls* _balls; AvatarTouch _avatarTouch;