From 19b9be336125d6425109d51ac7ee26474b46c4ea Mon Sep 17 00:00:00 2001 From: atlante45 Date: Wed, 7 Aug 2013 12:24:13 -0700 Subject: [PATCH 1/3] - Now P switch between first and third person view --- interface/src/Application.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f7423f73c7..44a20fa940 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1389,6 +1389,8 @@ void Application::setRenderFirstPerson(bool firstPerson) { if (firstPerson) { _lookingInMirror->setChecked(false); _manualThirdPerson->setChecked(false); + } else { + _manualThirdPerson->trigger(); } } From 35557e19737dba4b2042d0acb7f4844fbbf6b5b0 Mon Sep 17 00:00:00 2001 From: atlante45 Date: Wed, 7 Aug 2013 12:25:31 -0700 Subject: [PATCH 2/3] - Change collision radius according to near clip so nothing comes inside --- interface/src/avatar/Avatar.cpp | 10 ++++++++-- interface/src/avatar/Avatar.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) 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; From 3bc9dd116e856175d1e01cc016046d135c470172 Mon Sep 17 00:00:00 2001 From: atlante45 Date: Wed, 7 Aug 2013 12:31:31 -0700 Subject: [PATCH 3/3] - Compute collisions radius only when collisions are on --- interface/src/avatar/Avatar.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index e9e98b8705..93a2d05c52 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -636,6 +636,10 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter, float gyroCamer } if (_isCollisionsOn) { + Camera* myCamera = Application::getInstance()->getCamera(); + _collisionRadius = myCamera->getAspectRatio() * (myCamera->getNearClip() / cos(myCamera->getFieldOfView() / 2.f)); + _collisionRadius *= COLLISION_RADIUS_SCALAR; + updateCollisionWithEnvironment(deltaTime); updateCollisionWithVoxels(deltaTime); updateAvatarCollisions(deltaTime); @@ -1645,9 +1649,5 @@ 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; }