Merge pull request #1010 from ey6es/master

Fix for Faceshift head position when avatar is scaled.
This commit is contained in:
Andrzej Kapolka 2013-10-02 15:15:12 -07:00
commit db6951a9be

View file

@ -41,7 +41,7 @@ void BlendFace::init() {
} }
} }
const glm::vec3 MODEL_TRANSLATION(0.0f, -0.07f, -0.025f); // temporary fudge factor const glm::vec3 MODEL_TRANSLATION(0.0f, -120.0f, 40.0f); // temporary fudge factor
const float MODEL_SCALE = 0.0006f; const float MODEL_SCALE = 0.0006f;
bool BlendFace::render(float alpha) { bool BlendFace::render(float alpha) {
@ -74,12 +74,12 @@ bool BlendFace::render(float alpha) {
glm::quat orientation = _owningHead->getOrientation(); glm::quat orientation = _owningHead->getOrientation();
glm::vec3 axis = glm::axis(orientation); glm::vec3 axis = glm::axis(orientation);
glRotatef(glm::angle(orientation), axis.x, axis.y, axis.z); glRotatef(glm::angle(orientation), axis.x, axis.y, axis.z);
glTranslatef(MODEL_TRANSLATION.x, MODEL_TRANSLATION.y, MODEL_TRANSLATION.z);
glm::vec3 scale(-_owningHead->getScale() * MODEL_SCALE, _owningHead->getScale() * MODEL_SCALE, glm::vec3 scale(-_owningHead->getScale() * MODEL_SCALE, _owningHead->getScale() * MODEL_SCALE,
-_owningHead->getScale() * MODEL_SCALE); -_owningHead->getScale() * MODEL_SCALE);
glScalef(scale.x, scale.y, scale.z); glScalef(scale.x, scale.y, scale.z);
glTranslatef(-geometry.neckPivot.x, -geometry.neckPivot.y, -geometry.neckPivot.z); glm::vec3 offset = MODEL_TRANSLATION - geometry.neckPivot;
glTranslatef(offset.x, offset.y, offset.z);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_NORMAL_ARRAY);
@ -207,7 +207,7 @@ void BlendFace::getEyePositions(glm::vec3& firstEyePosition, glm::vec3& secondEy
const FBXGeometry& geometry = _geometry->getFBXGeometry(); const FBXGeometry& geometry = _geometry->getFBXGeometry();
foreach (const FBXMesh& mesh, geometry.meshes) { foreach (const FBXMesh& mesh, geometry.meshes) {
if (mesh.isEye) { if (mesh.isEye) {
glm::vec3 position = orientation * ((mesh.pivot - geometry.neckPivot) * scale + MODEL_TRANSLATION) + glm::vec3 position = orientation * ((mesh.pivot + MODEL_TRANSLATION - geometry.neckPivot) * scale) +
_owningHead->getPosition(); _owningHead->getPosition();
if (foundFirst) { if (foundFirst) {
secondEyePosition = position; secondEyePosition = position;