mirror of
https://github.com/overte-org/overte.git
synced 2025-04-19 15:43:50 +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;
|
||||
_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
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,11 @@ private:
|
|||
float _browsU_C;
|
||||
float _browsU_L;
|
||||
float _browsU_R;
|
||||
|
||||
float _mouthSize;
|
||||
|
||||
float _leftBlink;
|
||||
float _rightBlink;
|
||||
};
|
||||
|
||||
#endif /* defined(__interface__Face__) */
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue