eyelib handling for faceshift

This commit is contained in:
atlante45 2013-09-10 16:35:14 -07:00
parent 85c3d54718
commit 61f9088d3e
5 changed files with 62 additions and 16 deletions

View file

@ -158,7 +158,7 @@ void Head::simulate(float deltaTime, bool isMine, float gyroCameraSensitivity) {
const float MOUTH_SIZE_SCALE = 2500.0f;
_averageLoudness = faceshift->getMouthSize() * faceshift->getMouthSize() * MOUTH_SIZE_SCALE;
const float BROW_HEIGHT_SCALE = 0.005f;
_browAudioLift = faceshift->getBrowHeight() * BROW_HEIGHT_SCALE;
_browAudioLift = faceshift->getBrowUpCenter() * BROW_HEIGHT_SCALE;
} else {
// Update eye saccades

View file

@ -87,7 +87,10 @@ PerlinFace::PerlinFace(Head *owningHead)
_browsD_R(0),
_browsU_C(0),
_browsU_L(0),
_browsU_R(0) {
_browsU_R(0),
_mouthSize(0),
_leftBlink(0),
_rightBlink(0) {
}
PerlinFace::~PerlinFace() {
@ -189,6 +192,30 @@ void PerlinFace::render() {
glDrawArrays(GL_TRIANGLES, 0, VERTEX_PER_TRIANGLE * _trianglesCount);
// Draw eyes
glColor3d(0, 0, 0);
glBegin(GL_LINE_LOOP);
glVertex3d(_vertices[EYE_LEFT].x, _vertices[EYE_LEFT].y, _vertices[EYE_LEFT].z);
glVertex3d(_vertices[EYE_MID_TOP].x, _vertices[EYE_MID_TOP].y, _vertices[EYE_MID_TOP].z);
glVertex3d(_vertices[EYE_RIGHT].x, _vertices[EYE_RIGHT].y, _vertices[EYE_RIGHT].z);
glVertex3d(_vertices[EYE_MID_BOTTOM].x, _vertices[EYE_MID_BOTTOM].y, _vertices[EYE_MID_BOTTOM].z);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3d(_vertices[NUM_VERTICES + EYE_LEFT].x,
_vertices[NUM_VERTICES + EYE_LEFT].y,
_vertices[NUM_VERTICES + EYE_LEFT].z);
glVertex3d(_vertices[NUM_VERTICES + EYE_MID_TOP].x,
_vertices[NUM_VERTICES + EYE_MID_TOP].y,
_vertices[NUM_VERTICES + EYE_MID_TOP].z);
glVertex3d(_vertices[NUM_VERTICES + EYE_RIGHT].x,
_vertices[NUM_VERTICES + EYE_RIGHT].y,
_vertices[NUM_VERTICES + EYE_RIGHT].z);
glVertex3d(_vertices[NUM_VERTICES + EYE_MID_BOTTOM].x,
_vertices[NUM_VERTICES + EYE_MID_BOTTOM].y,
_vertices[NUM_VERTICES + EYE_MID_BOTTOM].z);
glEnd();
/*/
// Draw points for debug.
@ -223,13 +250,16 @@ void PerlinFace::updatePositions() {
const float BROWS_DOWN_MAX = 1;
const float BROWS_UP_CENTER_MAX = 1;
Faceshift* faceshift = Application::getFaceshift();
Faceshift* faceshift = Application::getInstance()->getFaceshift();
if (faceshift->isActive()) {
_browsD_L = faceshift->getBrowDownLeft();
_browsD_R = faceshift->getBrowDownRight();
_browsU_C = faceshift->getBrowHeight();
_browsU_C = faceshift->getBrowUpCenter();
_browsU_L = faceshift->getBrowUpLeft();
_browsU_R = faceshift->getBrowUpRight();
_mouthSize = faceshift->getMouthSize();
_leftBlink = faceshift->getLeftBlink();
_rightBlink = faceshift->getRightBlink();
}
@ -265,22 +295,31 @@ void PerlinFace::updatePositions() {
_vertices[MOUTH_BOTTOM_IN].y = VERTICES[FLOAT_PER_VERTEX * MOUTH_BOTTOM_IN + 1]
+ 6.2;
+ (1.0 - _mouthSize) * 6.2;
_vertices[MOUTH_BOTTOM_OUT].y = VERTICES[FLOAT_PER_VERTEX * MOUTH_BOTTOM_OUT + 1]
+ 6;
+ (1.0 - _mouthSize) * 6;
_vertices[MOUTH_MID_IN].y = VERTICES[FLOAT_PER_VERTEX * MOUTH_MID_IN + 1]
+ 3;
+ (1.0 - _mouthSize) * 3;
_vertices[MOUTH_MID_OUT].y = VERTICES[FLOAT_PER_VERTEX * MOUTH_MID_OUT + 1]
+ 3;
+ (1.0 - _mouthSize) * 3;
_vertices[NUM_VERTICES + MOUTH_BOTTOM_IN].y = VERTICES[FLOAT_PER_VERTEX * (NUM_VERTICES + MOUTH_BOTTOM_IN) + 1]
+ 6.2;
+ (1.0 - _mouthSize) * 6.2;
_vertices[NUM_VERTICES + MOUTH_BOTTOM_OUT].y = VERTICES[FLOAT_PER_VERTEX * (NUM_VERTICES + MOUTH_BOTTOM_OUT) + 1]
+ 6;
+ (1.0 - _mouthSize) * 6;
_vertices[NUM_VERTICES + MOUTH_MID_IN].y = VERTICES[FLOAT_PER_VERTEX * (NUM_VERTICES + MOUTH_MID_IN) + 1]
+ 3;
+ (1.0 - _mouthSize) * 3;
_vertices[NUM_VERTICES + MOUTH_MID_OUT].y = VERTICES[FLOAT_PER_VERTEX * (NUM_VERTICES + MOUTH_MID_OUT) + 1]
+ 3;
+ (1.0 - _mouthSize) * 3;
// Eyelid
_vertices[EYE_MID_TOP] = (1.0f - _leftBlink) * _vertices[EYE_MID_TOP] + _leftBlink * (_vertices[EYE_MID_TOP] + _vertices[EYE_MID_BOTTOM]) / 2.0f;
_vertices[EYE_MID_BOTTOM] = (1.0f - _leftBlink) * _vertices[EYE_MID_BOTTOM] + _leftBlink * (_vertices[EYE_MID_TOP] + _vertices[EYE_MID_BOTTOM]) / 2.0f;
_vertices[NUM_VERTICES + EYE_MID_TOP] = (1.0f - _leftBlink) * _vertices[NUM_VERTICES + EYE_MID_TOP]
+ _leftBlink * (_vertices[NUM_VERTICES + EYE_MID_TOP] + _vertices[NUM_VERTICES + EYE_MID_BOTTOM]) / 2.0f;
_vertices[NUM_VERTICES + EYE_MID_BOTTOM] = (1.0f - _leftBlink) * _vertices[NUM_VERTICES + EYE_MID_BOTTOM]
+ _leftBlink * (_vertices[NUM_VERTICES + EYE_MID_TOP] + _vertices[NUM_VERTICES + EYE_MID_BOTTOM]) / 2.0f;
}

View file

@ -61,6 +61,11 @@ private:
float _browsU_C;
float _browsU_L;
float _browsU_R;
float _mouthSize;
float _leftBlink;
float _rightBlink;
};
#endif /* defined(__interface__Face__) */

View file

@ -25,7 +25,7 @@ Faceshift::Faceshift() :
_rightBlinkIndex(-1),
_browDownLeft(0.0f),
_browDownRight(0.0f),
_browHeight(0.0f),
_browUpCenter(0.0f),
_browUpLeft(0.0f),
_browUpRight(0.0f),
_browDownLeftIndex(-1),
@ -135,7 +135,7 @@ void Faceshift::readFromSocket() {
_browDownRight = data.m_coeffs[_browDownRightIndex];
}
if (_browUpCenterIndex != -1) {
_browHeight = data.m_coeffs[_browUpCenterIndex];
_browUpCenter = data.m_coeffs[_browUpCenterIndex];
}
if (_browUpLeftIndex != -1) {
_browUpLeft = data.m_coeffs[_browUpLeftIndex];

View file

@ -43,7 +43,7 @@ public:
float getBrowDownLeft() const { return _browDownLeft; }
float getBrowDownRight() const { return _browDownRight; }
float getBrowHeight() const { return _browHeight; }
float getBrowUpCenter() const { return _browUpCenter; }
float getBrowUpLeft() const { return _browUpLeft; }
float getBrowUpRight() const { return _browUpRight; }
@ -87,9 +87,11 @@ private:
int _leftBlinkIndex;
int _rightBlinkIndex;
// Brows
float _browDownLeft;
float _browDownRight;
float _browHeight;
float _browUpCenter;
float _browUpLeft;
float _browUpRight;