fixed a physics bug in avatar body spring (forgot to use deltaTime) - and adjusted various physics constants accordingly.

This commit is contained in:
Jeffrey Ventrella 2013-05-03 16:11:35 -07:00
parent 85ad5601d7
commit cb8e68f300
3 changed files with 22 additions and 14 deletions

View file

@ -32,9 +32,14 @@ const float BODY_ROLL_WHILE_TURNING = 0.1;
const float LIN_VEL_DECAY = 5.0;
const float MY_HAND_HOLDING_PULL = 0.2;
const float YOUR_HAND_HOLDING_PULL = 1.0;
const float BODY_SPRING_FORCE = 6.0f;
//const float BODY_SPRING_DEFAULT_TIGHTNESS = 20.0f;
//const float BODY_SPRING_FORCE = 6.0f;
const float BODY_SPRING_DEFAULT_TIGHTNESS = 1500.0f;
const float BODY_SPRING_FORCE = 300.0f;
const float BODY_SPRING_DECAY = 16.0f;
const float BODY_SPRING_DEFAULT_TIGHTNESS = 20.0f;
const float COLLISION_RADIUS_SCALAR = 1.8;
const float COLLISION_BALL_FORCE = 1.0;
const float COLLISION_BODY_FORCE = 6.0;
@ -336,10 +341,6 @@ void Avatar::simulate(float deltaTime) {
//update the movement of the hand and process handshaking with other avatars...
updateHandMovementAndTouching(deltaTime);
// test for avatar collision response with the big sphere
if (usingBigSphereCollisionTest) {
updateCollisionWithSphere( _TEST_bigSpherePosition, _TEST_bigSphereRadius, deltaTime );
}
// apply gravity and collision wiht the ground/floor
if ( AVATAR_GRAVITY ) {
@ -354,6 +355,11 @@ void Avatar::simulate(float deltaTime) {
// update body springs
updateBodySprings( deltaTime );
// test for avatar collision response with the big sphere
if (usingBigSphereCollisionTest) {
updateCollisionWithSphere( _TEST_bigSpherePosition, _TEST_bigSphereRadius, deltaTime );
}
// driving the avatar around should only apply if this is my avatar (as opposed to an avatar being driven remotely)
if ( _isMine ) {
@ -670,9 +676,9 @@ void Avatar::updateCollisionWithSphere( glm::vec3 position, float radius, float
float penetration = 1.0 - (distanceToBigSphereCenter / combinedRadius);
glm::vec3 collisionForce = vectorFromJointToBigSphereCenter * penetration;
_joint[b].springyVelocity += collisionForce * 30.0f * deltaTime;
_velocity += collisionForce * 100.0f * deltaTime;
_joint[b].springyPosition = position + directionVector * combinedRadius;
_joint[b].springyVelocity += collisionForce * 0.0f * deltaTime;
_velocity += collisionForce * 40.0f * deltaTime;
_joint[b].springyPosition = position + directionVector * combinedRadius;
}
}
}
@ -1292,7 +1298,7 @@ void Avatar::updateBodySprings( float deltaTime ) {
_joint[b].springyVelocity = glm::vec3( 0.0f, 0.0f, 0.0f );
}
_joint[b].springyPosition += _joint[b].springyVelocity;
_joint[b].springyPosition += _joint[b].springyVelocity * deltaTime;
}
}

View file

@ -245,12 +245,14 @@ void renderDiskShadow(glm::vec3 position, glm::vec3 upDirection, float radius, f
glColor4f( 0.0f, 0.0f, 0.0f, darkness );
int num = 20;
float y = 0.01f;
float y = 0.001f;
float x2 = 0.0f;
float z2 = radius;
float x1;
float z1;
glBegin(GL_TRIANGLES);
for (int i=1; i<num+1; i++) {
x1 = x2;
z1 = z2;
@ -258,12 +260,12 @@ void renderDiskShadow(glm::vec3 position, glm::vec3 upDirection, float radius, f
x2 = radius * sin(r);
z2 = radius * cos(r);
glBegin(GL_TRIANGLES);
glVertex3f(position.x, y, position.z );
glVertex3f(position.x + x1, y, position.z + z1);
glVertex3f(position.x + x2, y, position.z + z2);
glEnd();
}
glEnd();
}

View file

@ -1015,7 +1015,7 @@ void display(void)
float firstPersonTightness = 100.0f;
float thirdPersonPitch = 0.0f;
float thirdPersonUpShift = -0.1f;
float thirdPersonUpShift = -0.2f;
float thirdPersonDistance = 1.2f;
float thirdPersonTightness = 8.0f;