mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 02:52:57 +02:00
eyelib handling for faceshift
This commit is contained in:
parent
85c3d54718
commit
61f9088d3e
5 changed files with 62 additions and 16 deletions
|
@ -158,7 +158,7 @@ void Head::simulate(float deltaTime, bool isMine, float gyroCameraSensitivity) {
|
||||||
const float MOUTH_SIZE_SCALE = 2500.0f;
|
const float MOUTH_SIZE_SCALE = 2500.0f;
|
||||||
_averageLoudness = faceshift->getMouthSize() * faceshift->getMouthSize() * MOUTH_SIZE_SCALE;
|
_averageLoudness = faceshift->getMouthSize() * faceshift->getMouthSize() * MOUTH_SIZE_SCALE;
|
||||||
const float BROW_HEIGHT_SCALE = 0.005f;
|
const float BROW_HEIGHT_SCALE = 0.005f;
|
||||||
_browAudioLift = faceshift->getBrowHeight() * BROW_HEIGHT_SCALE;
|
_browAudioLift = faceshift->getBrowUpCenter() * BROW_HEIGHT_SCALE;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Update eye saccades
|
// Update eye saccades
|
||||||
|
|
|
@ -87,7 +87,10 @@ PerlinFace::PerlinFace(Head *owningHead)
|
||||||
_browsD_R(0),
|
_browsD_R(0),
|
||||||
_browsU_C(0),
|
_browsU_C(0),
|
||||||
_browsU_L(0),
|
_browsU_L(0),
|
||||||
_browsU_R(0) {
|
_browsU_R(0),
|
||||||
|
_mouthSize(0),
|
||||||
|
_leftBlink(0),
|
||||||
|
_rightBlink(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
PerlinFace::~PerlinFace() {
|
PerlinFace::~PerlinFace() {
|
||||||
|
@ -189,6 +192,30 @@ void PerlinFace::render() {
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, VERTEX_PER_TRIANGLE * _trianglesCount);
|
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.
|
// Draw points for debug.
|
||||||
|
@ -223,13 +250,16 @@ void PerlinFace::updatePositions() {
|
||||||
const float BROWS_DOWN_MAX = 1;
|
const float BROWS_DOWN_MAX = 1;
|
||||||
const float BROWS_UP_CENTER_MAX = 1;
|
const float BROWS_UP_CENTER_MAX = 1;
|
||||||
|
|
||||||
Faceshift* faceshift = Application::getFaceshift();
|
Faceshift* faceshift = Application::getInstance()->getFaceshift();
|
||||||
if (faceshift->isActive()) {
|
if (faceshift->isActive()) {
|
||||||
_browsD_L = faceshift->getBrowDownLeft();
|
_browsD_L = faceshift->getBrowDownLeft();
|
||||||
_browsD_R = faceshift->getBrowDownRight();
|
_browsD_R = faceshift->getBrowDownRight();
|
||||||
_browsU_C = faceshift->getBrowHeight();
|
_browsU_C = faceshift->getBrowUpCenter();
|
||||||
_browsU_L = faceshift->getBrowUpLeft();
|
_browsU_L = faceshift->getBrowUpLeft();
|
||||||
_browsU_R = faceshift->getBrowUpRight();
|
_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]
|
_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]
|
_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]
|
_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]
|
_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]
|
_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]
|
_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]
|
_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]
|
_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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,11 @@ private:
|
||||||
float _browsU_C;
|
float _browsU_C;
|
||||||
float _browsU_L;
|
float _browsU_L;
|
||||||
float _browsU_R;
|
float _browsU_R;
|
||||||
|
|
||||||
|
float _mouthSize;
|
||||||
|
|
||||||
|
float _leftBlink;
|
||||||
|
float _rightBlink;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* defined(__interface__Face__) */
|
#endif /* defined(__interface__Face__) */
|
||||||
|
|
|
@ -25,7 +25,7 @@ Faceshift::Faceshift() :
|
||||||
_rightBlinkIndex(-1),
|
_rightBlinkIndex(-1),
|
||||||
_browDownLeft(0.0f),
|
_browDownLeft(0.0f),
|
||||||
_browDownRight(0.0f),
|
_browDownRight(0.0f),
|
||||||
_browHeight(0.0f),
|
_browUpCenter(0.0f),
|
||||||
_browUpLeft(0.0f),
|
_browUpLeft(0.0f),
|
||||||
_browUpRight(0.0f),
|
_browUpRight(0.0f),
|
||||||
_browDownLeftIndex(-1),
|
_browDownLeftIndex(-1),
|
||||||
|
@ -135,7 +135,7 @@ void Faceshift::readFromSocket() {
|
||||||
_browDownRight = data.m_coeffs[_browDownRightIndex];
|
_browDownRight = data.m_coeffs[_browDownRightIndex];
|
||||||
}
|
}
|
||||||
if (_browUpCenterIndex != -1) {
|
if (_browUpCenterIndex != -1) {
|
||||||
_browHeight = data.m_coeffs[_browUpCenterIndex];
|
_browUpCenter = data.m_coeffs[_browUpCenterIndex];
|
||||||
}
|
}
|
||||||
if (_browUpLeftIndex != -1) {
|
if (_browUpLeftIndex != -1) {
|
||||||
_browUpLeft = data.m_coeffs[_browUpLeftIndex];
|
_browUpLeft = data.m_coeffs[_browUpLeftIndex];
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
|
|
||||||
float getBrowDownLeft() const { return _browDownLeft; }
|
float getBrowDownLeft() const { return _browDownLeft; }
|
||||||
float getBrowDownRight() const { return _browDownRight; }
|
float getBrowDownRight() const { return _browDownRight; }
|
||||||
float getBrowHeight() const { return _browHeight; }
|
float getBrowUpCenter() const { return _browUpCenter; }
|
||||||
float getBrowUpLeft() const { return _browUpLeft; }
|
float getBrowUpLeft() const { return _browUpLeft; }
|
||||||
float getBrowUpRight() const { return _browUpRight; }
|
float getBrowUpRight() const { return _browUpRight; }
|
||||||
|
|
||||||
|
@ -87,9 +87,11 @@ private:
|
||||||
int _leftBlinkIndex;
|
int _leftBlinkIndex;
|
||||||
int _rightBlinkIndex;
|
int _rightBlinkIndex;
|
||||||
|
|
||||||
|
|
||||||
|
// Brows
|
||||||
float _browDownLeft;
|
float _browDownLeft;
|
||||||
float _browDownRight;
|
float _browDownRight;
|
||||||
float _browHeight;
|
float _browUpCenter;
|
||||||
float _browUpLeft;
|
float _browUpLeft;
|
||||||
float _browUpRight;
|
float _browUpRight;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue