mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 17:41:12 +02:00
Merge pull request #2940 from AndrewMeadows/inertia
fix for lack of neck rotations
This commit is contained in:
commit
9546fe477c
2 changed files with 19 additions and 1 deletions
|
@ -70,6 +70,23 @@ void FaceModel::maybeUpdateEyeRotation(const JointState& parentState, const FBXJ
|
||||||
joint.rotation;
|
joint.rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FaceModel::updateJointState(int index) {
|
||||||
|
JointState& state = _jointStates[index];
|
||||||
|
const FBXGeometry& geometry = _geometry->getFBXGeometry();
|
||||||
|
const FBXJoint& joint = geometry.joints.at(index);
|
||||||
|
if (joint.parentIndex != -1) {
|
||||||
|
const JointState& parentState = _jointStates.at(joint.parentIndex);
|
||||||
|
if (index == geometry.neckJointIndex) {
|
||||||
|
maybeUpdateNeckRotation(parentState, joint, state);
|
||||||
|
|
||||||
|
} else if (index == geometry.leftEyeJointIndex || index == geometry.rightEyeJointIndex) {
|
||||||
|
maybeUpdateEyeRotation(parentState, joint, state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Model::updateJointState(index);
|
||||||
|
}
|
||||||
|
|
||||||
bool FaceModel::getEyePositions(glm::vec3& firstEyePosition, glm::vec3& secondEyePosition) const {
|
bool FaceModel::getEyePositions(glm::vec3& firstEyePosition, glm::vec3& secondEyePosition) const {
|
||||||
if (!isActive()) {
|
if (!isActive()) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -28,7 +28,8 @@ public:
|
||||||
|
|
||||||
virtual void maybeUpdateNeckRotation(const JointState& parentState, const FBXJoint& joint, JointState& state);
|
virtual void maybeUpdateNeckRotation(const JointState& parentState, const FBXJoint& joint, JointState& state);
|
||||||
virtual void maybeUpdateEyeRotation(const JointState& parentState, const FBXJoint& joint, JointState& state);
|
virtual void maybeUpdateEyeRotation(const JointState& parentState, const FBXJoint& joint, JointState& state);
|
||||||
|
virtual void updateJointState(int index);
|
||||||
|
|
||||||
/// Retrieve the positions of up to two eye meshes.
|
/// Retrieve the positions of up to two eye meshes.
|
||||||
/// \return whether or not both eye meshes were found
|
/// \return whether or not both eye meshes were found
|
||||||
bool getEyePositions(glm::vec3& firstEyePosition, glm::vec3& secondEyePosition) const;
|
bool getEyePositions(glm::vec3& firstEyePosition, glm::vec3& secondEyePosition) const;
|
||||||
|
|
Loading…
Reference in a new issue