diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index c8f60ef51e..e9e98b8705 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -131,6 +131,8 @@ Avatar::Avatar(Node* owningNode) : } else { _balls = NULL; } + + _collisionRadius = _height * 0.125f; } @@ -978,7 +980,7 @@ void Avatar::updateCollisionWithSphere(glm::vec3 position, float radius, float d void Avatar::updateCollisionWithEnvironment(float deltaTime) { glm::vec3 up = getBodyUpDirection(); - float radius = _height * 0.125f; + float radius = _collisionRadius; const float ENVIRONMENT_SURFACE_ELASTICITY = 1.0f; const float ENVIRONMENT_SURFACE_DAMPING = 0.01; const float ENVIRONMENT_COLLISION_FREQUENCY = 0.05f; @@ -994,7 +996,7 @@ void Avatar::updateCollisionWithEnvironment(float deltaTime) { void Avatar::updateCollisionWithVoxels(float deltaTime) { - float radius = _height * 0.125f; + float radius = _collisionRadius; const float VOXEL_ELASTICITY = 1.4f; const float VOXEL_DAMPING = 0.0; const float VOXEL_COLLISION_FREQUENCY = 0.5f; @@ -1643,5 +1645,9 @@ void Avatar::setScale(const float scale) { _pelvisFloatingHeight = _skeleton.getPelvisFloatingHeight() + _bodyBall[ BODY_BALL_LEFT_HEEL ].radius; _pelvisToHeadLength = _skeleton.getPelvisToHeadLength(); _avatarTouch.setReachableRadius(_scale * PERIPERSONAL_RADIUS); + + Camera* myCamera = Application::getInstance()->getCamera(); + _collisionRadius = myCamera->getAspectRatio() * (myCamera->getNearClip() / cos(myCamera->getFieldOfView() / 2.f)); + _collisionRadius *= COLLISION_RADIUS_SCALAR; } diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index ab122ee81b..155028c43f 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -273,6 +273,7 @@ private: bool _speedBrakes; bool _isThrustOn; bool _isCollisionsOn; + float _collisionRadius; Avatar* _leadingAvatar; float _stringLength;