History

Merge remote-tracking branch 'upstream/master' into plugins

Brad Davis committed 11 years ago

Commit 4417c002 parents a5428ae 8a6ab68128 files · +3167 −2493Browse files

Showing the changes to interface/src/avatar/SkeletonModel.cpp (1 of 128 files). Show all

Unified · Split

interface/src/avatar/SkeletonModel.cpp+63−2
@@ -21,6 +21,7 @@ · 20 unmodified lines
21#include "Menu.h"21#include "Menu.h"
22#include "SkeletonModel.h"22#include "SkeletonModel.h"
23#include "Util.h"23#include "Util.h"
24#include "InterfaceLogging.h"
24 25
25enum StandingFootState {26enum StandingFootState {
26 LEFT_FOOT,27 LEFT_FOOT,
@@ -38,7 +39,8 @@ SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent) : · 11 unmodified lines
38 _standingFoot(NO_FOOT),39 _standingFoot(NO_FOOT),
39 _standingOffset(0.0f),40 _standingOffset(0.0f),
40 _clampedFootPosition(0.0f),41 _clampedFootPosition(0.0f),
41 _headClipDistance(DEFAULT_NEAR_CLIP)42 _headClipDistance(DEFAULT_NEAR_CLIP),
43 _isFirstPerson(false)
42{44{
43 assert(_owningAvatar);45 assert(_owningAvatar);
44 _enableShapes = true;46 _enableShapes = true;
@@ -98,7 +100,7 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { · 53 unmodified lines
98 setRotation(_owningAvatar->getOrientation() * refOrientation);100 setRotation(_owningAvatar->getOrientation() * refOrientation);
99 setScale(glm::vec3(1.0f, 1.0f, 1.0f) * _owningAvatar->getScale());101 setScale(glm::vec3(1.0f, 1.0f, 1.0f) * _owningAvatar->getScale());
100 setBlendshapeCoefficients(_owningAvatar->getHead()->getBlendshapeCoefficients());102 setBlendshapeCoefficients(_owningAvatar->getHead()->getBlendshapeCoefficients());
101 103
102 Model::simulate(deltaTime, fullUpdate);104 Model::simulate(deltaTime, fullUpdate);
103 105
104 if (!isActive() || !_owningAvatar->isMyAvatar()) {106 if (!isActive() || !_owningAvatar->isMyAvatar()) {
@@ -140,6 +142,11 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { · 35 unmodified lines
140 applyPalmData(geometry.rightHandJointIndex, hand->getPalms()[rightPalmIndex]);142 applyPalmData(geometry.rightHandJointIndex, hand->getPalms()[rightPalmIndex]);
141 }143 }
142 144
145 if (_isFirstPerson) {
146 cauterizeHead();
147 updateClusterMatrices();
148 }
149
143 _boundingShape.setTranslation(_translation + _rotation * _boundingShapeLocalOffset);150 _boundingShape.setTranslation(_translation + _rotation * _boundingShapeLocalOffset);
144 _boundingShape.setRotation(_rotation);151 _boundingShape.setRotation(_rotation);
145}152}
@@ -808,3 +815,57 @@ void SkeletonModel::renderBoundingCollisionShapes(float alpha) { · 662 unmodified lines
808bool SkeletonModel::hasSkeleton() {815bool SkeletonModel::hasSkeleton() {
809 return isActive() ? _geometry->getFBXGeometry().rootJointIndex != -1 : false;816 return isActive() ? _geometry->getFBXGeometry().rootJointIndex != -1 : false;
810}817}
818
819void SkeletonModel::initHeadBones() {
820 _headBones.clear();
821 const FBXGeometry& fbxGeometry = _geometry->getFBXGeometry();
822 const int neckJointIndex = fbxGeometry.neckJointIndex;
823 std::queue<int> q;
824 q.push(neckJointIndex);
825 _headBones.push_back(neckJointIndex);
826
827 // fbxJoints only hold links to parents not children, so we have to do a bit of extra work here.
828 while (q.size() > 0) {
829 int jointIndex = q.front();
830 for (int i = 0; i < fbxGeometry.joints.size(); i++) {
831 const FBXJoint& fbxJoint = fbxGeometry.joints[i];
832 if (jointIndex == fbxJoint.parentIndex) {
833 _headBones.push_back(i);
834 q.push(i);
835 }
836 }
837 q.pop();
838 }
839}
840
841void SkeletonModel::invalidateHeadBones() {
842 _headBones.clear();
843}
844
845void SkeletonModel::cauterizeHead() {
846 if (isActive()) {
847 const FBXGeometry& geometry = _geometry->getFBXGeometry();
848 const int neckJointIndex = geometry.neckJointIndex;
849 if (neckJointIndex > 0 && neckJointIndex < _jointStates.size()) {
850
851 // lazy init of headBones
852 if (_headBones.size() == 0) {
853 initHeadBones();
854 }
855
856 // preserve the translation for the neck
857 glm::vec4 trans = _jointStates[neckJointIndex].getTransform()[3];
858 glm::vec4 zero(0, 0, 0, 0);
859 for (const int &i : _headBones) {
860 JointState& joint = _jointStates[i];
861 glm::mat4 newXform(zero, zero, zero, trans);
862 joint.setTransform(newXform);
863 joint.setVisibleTransform(newXform);
864 }
865 }
866 }
867}
868
869void SkeletonModel::onInvalidate() {
870 invalidateHeadBones();
871}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t