Added angular velocity and angular movement to hand, changed hand to block.

This commit is contained in:
Philip Rosedale 2013-02-25 14:31:56 -08:00 committed by stojce
parent b7fed56c16
commit 888ef2249d
2 changed files with 52 additions and 9 deletions

View file

@ -24,14 +24,24 @@ Hand::Hand(glm::vec3 initcolor)
scale.z = scale.y * 1.0;
}
void Hand::addAngularVelocity (float pRate, float yRate, float rRate) {
pitchRate += pRate;
yawRate += yRate;
rollRate += rRate;
}
void Hand::render()
{
// glPushMatrix();
// glTranslatef(position.x, position.y, position.z);
// glColor3f(color.x, color.y, color.z);
// glScalef(scale.x, scale.y, scale.z);
// glutSolidSphere(1.5, 20, 20);
// glPopMatrix();
glPushMatrix();
glTranslatef(position.x, position.y, position.z);
glRotatef(yaw, 0, 1, 0);
glRotatef(pitch, 1, 0, 0);
glRotatef(roll, 0, 0, 1);
glColor3f(color.x, color.y, color.z);
glScalef(scale.x, scale.y, scale.z);
//glutSolidSphere(1.5, 20, 20);
glutSolidCube(1.0);
glPopMatrix();
}
void Hand::reset()
@ -39,17 +49,48 @@ void Hand::reset()
position.x = DEFAULT_X;
position.y = DEFAULT_Y;
position.z = DEFAULT_Z;
pitch = yaw = roll = 0;
pitchRate = yawRate = rollRate = 0;
setTarget(position);
velocity.x = velocity.y = velocity.z = 0;
}
void Hand::simulate(float deltaTime)
{
// If noise, add wandering movement
const float VNOISE = 0.1;
const float RSPRING = 0.01;
const float RNOISE = 0.1;
// If noise, add a bit of random velocity
if (noise) {
position += noise * 0.1f * glm::vec3(randFloat() - 0.5, randFloat() - 0.5, randFloat() - 0.5);
glm::vec3 nVel(randFloat() - 0.5f, randFloat() - 0.5f, randFloat() - 0.5f);
nVel *= VNOISE;
addVelocity(nVel);
addAngularVelocity(RNOISE*(randFloat() - 0.5f),
RNOISE*(randFloat() - 0.5f),
RNOISE*(randFloat() - 0.5f));
}
position += velocity*deltaTime;
pitch += pitchRate;
yaw += yawRate;
roll += rollRate;
// Decay position of hand toward target
position -= deltaTime*(position - target);
// Decay velocity
velocity *= 1.0 - deltaTime;
// Decay Angular Velocity
pitchRate *= 1.0 - deltaTime;
yawRate *= 1.0 - deltaTime;
rollRate *= 1.0 - deltaTime;
// Add spring effect to return hand rotation to zero
pitchRate -= pitch * RSPRING;
yawRate -= yaw * RSPRING;
rollRate -= roll * RSPRING;
}

View file

@ -23,12 +23,14 @@ public:
void render ();
void reset ();
void setNoise (float mag) { noise = mag; };
void addVel (glm::vec3 v) { velocity += v; };
void addVelocity (glm::vec3 v) { velocity += v; };
void addAngularVelocity (float pRate, float yRate, float rRate);
glm::vec3 getPos() { return position; };
void setPos(glm::vec3 p) { position = p; };
void setTarget(glm::vec3 t) { target = t; };
private:
glm::vec3 position, target, velocity, color, scale;
float pitch, yaw, roll, pitchRate, yawRate, rollRate;
float noise;
};