diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 600dc3f0ca..1a70ba9a13 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -95,7 +95,6 @@ Head::Head() { usingSprings = false; springForce = 6.0f; - springToBodyTightness = 4.0f; springVelocityDecay = 16.0f; hand = new Hand(glm::vec3(skinColor[0], skinColor[1], skinColor[2])); @@ -782,23 +781,27 @@ void Head::setHandMovement( glm::vec3 movement ) { void Head::initializeAvatar() { - //avatar.position = glm::vec3( 0.0, 0.0, 0.0 ); avatar.velocity = glm::vec3( 0.0, 0.0, 0.0 ); avatar.thrust = glm::vec3( 0.0, 0.0, 0.0 ); avatar.orientation.setToIdentity(); closestOtherAvatar = 0; - bodyYaw = -90.0; - bodyPitch = 0.0; - bodyRoll = 0.0; - - bodyYawDelta = 0.0; + bodyYaw = -90.0; + bodyPitch = 0.0; + bodyRoll = 0.0; + bodyYawDelta = 0.0; for (int b=0; b 0.0f ) { glm::vec3 springDirection = springVector / length; - float force = ( length - avatar.bone[b].length ) * springForce * deltaTime; + float force = ( length - avatar.bone[b].length ) * springForce * deltaTime; avatar.bone[ b ].springyVelocity -= springDirection * force; avatar.bone[ avatar.bone[b].parent ].springyVelocity += springDirection * force; } - avatar.bone[b].springyVelocity += ( avatar.bone[b].position - avatar.bone[b].springyPosition ) * springToBodyTightness * deltaTime; - + avatar.bone[b].springyVelocity += ( avatar.bone[b].position - avatar.bone[b].springyPosition ) * + avatar.bone[b].springBodyTightness * deltaTime; + float decay = 1.0 - springVelocityDecay * deltaTime; if ( decay > 0.0 ) { @@ -1000,6 +1039,11 @@ glm::vec3 Head::getHeadLookatDirectionUp() { ); } +glm::vec3 Head::getBonePosition( AvatarBones b ) +{ + return avatar.bone[b].position; +} + glm::vec3 Head::getHeadLookatDirectionRight() { return glm::vec3 ( diff --git a/interface/src/Head.h b/interface/src/Head.h index 2cda9a1af6..eeaa4ebee0 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -109,6 +109,7 @@ struct AvatarBone glm::vec3 defaultPosePosition; // the parent relative position when the avatar is in the "T-pose" glm::vec3 springyPosition; // used for special effects (a 'flexible' variant of position) glm::dvec3 springyVelocity; // used for special effects ( the velocity of the springy position) + float springBodyTightness; // how tightly (0 to 1) the springy position tries to stay on the position float yaw; // the yaw Euler angle of the bone rotation off the parent float pitch; // the pitch Euler angle of the bone rotation off the parent float roll; // the roll Euler angle of the bone rotation off the parent @@ -159,6 +160,7 @@ class Head : public AgentData { glm::vec3 getHeadLookatDirectionUp(); glm::vec3 getHeadLookatDirectionRight(); glm::vec3 getHeadPosition(); + glm::vec3 getBonePosition( AvatarBones b ); glm::vec3 getBodyPosition(); void render(int faceToFace, int isMine); @@ -254,7 +256,7 @@ class Head : public AgentData { float springVelocityDecay; float springForce; - float springToBodyTightness; + //float springToBodyTightness; int eyeContact; eyeContactTargets eyeContactTarget; diff --git a/interface/src/Util.h b/interface/src/Util.h index 0e0121e2da..5a6f6a96d6 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -24,7 +24,7 @@ static const double ONE_THIRD = 0.3333333; static const double PIE = 3.14159265359; static const double PI_TIMES_TWO = 3.14159265359 * 2.0; static const double PI_OVER_180 = 3.14159265359 / 180.0; -static const double EPSILON = 0.00001; //smallish number - used as margin of error for some values +static const double EPSILON = 0.00001; //smallish number - used as margin of error for some computations static const double SQUARE_ROOT_OF_2 = sqrt(2); static const double SQUARE_ROOT_OF_3 = sqrt(3); static const double METER = 1.0;