Eyebrows driven by audio, mouth doesn't turn red.

This commit is contained in:
Philip Rosedale 2013-02-26 18:44:42 -08:00
parent 27cc3a8ee5
commit 1dd3a9970d
2 changed files with 25 additions and 8 deletions

View file

@ -36,9 +36,9 @@ Head::Head()
interBrowDistance = 0.75; interBrowDistance = 0.75;
NominalPupilSize = 0.10; NominalPupilSize = 0.10;
Yaw = 0.0; Yaw = 0.0;
EyebrowPitch[0] = EyebrowPitch[1] = BrowPitchAngle[0]; EyebrowPitch[0] = EyebrowPitch[1] = -30;
EyebrowRoll[0] = 30; EyebrowRoll[0] = 20;
EyebrowRoll[1] = -30; EyebrowRoll[1] = -20;
MouthPitch = 0; MouthPitch = 0;
MouthYaw = 0; MouthYaw = 0;
MouthWidth = 1.0; MouthWidth = 1.0;
@ -56,6 +56,12 @@ Head::Head()
scale = 1.0; scale = 1.0;
renderYaw = 0.0; renderYaw = 0.0;
renderPitch = 0.0; renderPitch = 0.0;
audioAttack = 0.0;
loudness = 0.0;
averageLoudness = 0.0;
lastLoudness = 0.0;
browAudioLift = 0.0;
setNoise(0); setNoise(0);
hand = new Hand(glm::vec3(skinColor[0], skinColor[1], skinColor[2])); hand = new Hand(glm::vec3(skinColor[0], skinColor[1], skinColor[2]));
} }
@ -284,13 +290,22 @@ void Head::render(int faceToFace, float * myLocation)
// Eyebrows // Eyebrows
audioAttack = 0.9*audioAttack + 0.1*fabs(loudness - lastLoudness);
lastLoudness = loudness;
const float BROW_LIFT_THRESHOLD = 100;
if (audioAttack > BROW_LIFT_THRESHOLD)
browAudioLift += sqrt(audioAttack)/1000.0;
browAudioLift *= .90;
glPushMatrix(); glPushMatrix();
glTranslatef(-interBrowDistance/2.0,0.4,0.45); glTranslatef(-interBrowDistance/2.0,0.4,0.45);
for(side = 0; side < 2; side++) for(side = 0; side < 2; side++)
{ {
glColor3fv(browColor); glColor3fv(browColor);
glPushMatrix(); glPushMatrix();
glTranslatef(0, 0.4, 0); glTranslatef(0, 0.35 + browAudioLift, 0);
glRotatef(EyebrowPitch[side]/2.0, 1, 0, 0); glRotatef(EyebrowPitch[side]/2.0, 1, 0, 0);
glRotatef(EyebrowRoll[side]/2.0, 0, 0, 1); glRotatef(EyebrowRoll[side]/2.0, 0, 0, 1);
glScalef(browWidth, browThickness, 1); glScalef(browWidth, browThickness, 1);
@ -305,10 +320,10 @@ void Head::render(int faceToFace, float * myLocation)
glPushMatrix(); glPushMatrix();
glTranslatef(0,-0.35,0.75); glTranslatef(0,-0.35,0.75);
glColor3f(loudness/1000.0,0,0); glColor3f(0,0,0);
glRotatef(MouthPitch, 1, 0, 0); glRotatef(MouthPitch, 1, 0, 0);
glRotatef(MouthYaw, 0, 0, 1); glRotatef(MouthYaw, 0, 0, 1);
glScalef(MouthWidth*(.7 + sqrt(averageLoudness)/60.0), MouthHeight*(1.0 + sqrt(averageLoudness)/60.0), 1); glScalef(MouthWidth*(.7 + sqrt(averageLoudness)/60.0), MouthHeight*(1.0 + sqrt(averageLoudness)/30.0), 1);
glutSolidCube(0.5); glutSolidCube(0.5);
glPopMatrix(); glPopMatrix();

View file

@ -95,9 +95,11 @@ class Head : public AgentData {
float scale; float scale;
// Sound loudness information // Sound loudness information
float loudness; float loudness, lastLoudness;
float averageLoudness; float averageLoudness;
float audioAttack;
float browAudioLift;
glm::vec3 position; glm::vec3 position;
int eyeContact; int eyeContact;
eyeContactTargets eyeContactTarget; eyeContactTargets eyeContactTarget;