History

Rig: Switched over to use AnimPoses instead of JointStates

* fixed debug rendering * improved jointState/animPose diff detection code.

Anthony J. Thibault committed 10 years ago

Commit 982e2c01 parent 721da296 files · +134 −49Browse files

Showing the changes to libraries/render-utils/src/AnimDebugDraw.cpp (1 of 6 files). Show all

Unified · Split

libraries/render-utils/src/AnimDebugDraw.cpp+65−6
@@ -169,12 +169,20 @@ void AnimDebugDraw::removeAnimNode(const std::string& key) { · 168 unmodified lines
169169 _animNodes.erase(key);
170170 }
171171
172−void AnimDebugDraw::addPoses(const std::string& key, AnimSkeleton::ConstPointer skeleton, const AnimPoseVec& poses, const AnimPose& rootPose, const glm::vec4& color) {
173− _poses[key] = PosesInfo(skeleton, poses, rootPose, color);
172+void AnimDebugDraw::addRelativePoses(const std::string& key, AnimSkeleton::ConstPointer skeleton, const AnimPoseVec& poses, const AnimPose& rootPose, const glm::vec4& color) {
173+ _relativePoses[key] = PosesInfo(skeleton, poses, rootPose, color);
174174 }
175175
176−void AnimDebugDraw::removePoses(const std::string& key) {
177− _poses.erase(key);
176+void AnimDebugDraw::removeRelativePoses(const std::string& key) {
177+ _relativePoses.erase(key);
178+}
179+
180+void AnimDebugDraw::addAbsolutePoses(const std::string& key, AnimSkeleton::ConstPointer skeleton, const AnimPoseVec& poses, const AnimPose& rootPose, const glm::vec4& color) {
181+ _absolutePoses[key] = PosesInfo(skeleton, poses, rootPose, color);
182+}
183+
184+void AnimDebugDraw::removeAbsolutePoses(const std::string& key) {
185+ _absolutePoses.erase(key);
178186 }
179187
180188 static const uint32_t red = toRGBA(255, 0, 0, 255);
@@ -338,6 +346,9 @@ void AnimDebugDraw::update() { · 157 unmodified lines
338346
339347 // figure out how many verts we will need.
340348 int numVerts = 0;
349+
350+ // AJT: FIX ME
351+ /*
341352 for (auto& iter : _skeletons) {
342353 AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second);
343354 numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE;
@@ -362,7 +373,19 @@ void AnimDebugDraw::update() { · 18 unmodified lines
362373 }
363374 }
364375
365− for (auto& iter : _poses) {
376+ for (auto& iter : _relativePoses) {
377+ AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second);
378+ numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE;
379+ for (int i = 0; i < skeleton->getNumJoints(); i++) {
380+ auto parentIndex = skeleton->getParentIndex(i);
381+ if (parentIndex >= 0) {
382+ numVerts += VERTICES_PER_LINK;
383+ }
384+ }
385+ }
386+ */
387+
388+ for (auto& iter : _absolutePoses) {
366389 AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second);
367390 numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE;
368391 for (int i = 0; i < skeleton->getNumJoints(); i++) {
@@ -379,9 +402,14 @@ void AnimDebugDraw::update() { · 10 unmodified lines
379402 auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap();
380403 numVerts += myAvatarMarkerMap.size() * VERTICES_PER_BONE;
381404
405+ // allocate verts!
382406 data._vertexBuffer->resize(sizeof(Vertex) * numVerts);
383407 Vertex* verts = (Vertex*)data._vertexBuffer->editData();
384408 Vertex* v = verts;
409+
410+ // AJT: fixme
411+ // draw skeletons
412+ /*
385413 for (auto& iter : _skeletons) {
386414 AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second);
387415 AnimPose rootPose = std::get<1>(iter.second);
@@ -408,7 +436,11 @@ void AnimDebugDraw::update() { · 20 unmodified lines
408436 }
409437 }
410438 }
439+ */
411440
441+ // AJT: FIXME
442+ /*
443+ // draw animNodes
412444 for (auto& iter : _animNodes) {
413445 AnimNode::ConstPointer& animNode = std::get<0>(iter.second);
414446 AnimPose rootPose = std::get<1>(iter.second);
@@ -446,8 +478,12 @@ void AnimDebugDraw::update() { · 31 unmodified lines
446478 }
447479 }
448480 }
481+ */
449482
450− for (auto& iter : _poses) {
483+ // AJT: FIX ME
484+ /*
485+ // draw relative poses
486+ for (auto& iter : _relativePoses) {
451487 AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second);
452488 AnimPoseVec& poses = std::get<1>(iter.second);
453489 AnimPose rootPose = std::get<2>(iter.second);
@@ -482,6 +518,29 @@ void AnimDebugDraw::update() { · 28 unmodified lines
482518 }
483519 }
484520 }
521+ */
522+
523+ // draw absolute poses
524+ for (auto& iter : _absolutePoses) {
525+ AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second);
526+ AnimPoseVec& absPoses = std::get<1>(iter.second);
527+ AnimPose rootPose = std::get<2>(iter.second);
528+ glm::vec4 color = std::get<3>(iter.second);
529+
530+ for (int i = 0; i < skeleton->getNumJoints(); i++) {
531+ const float radius = BONE_RADIUS / (absPoses[i].scale.x * rootPose.scale.x);
532+
533+ // draw bone
534+ addBone(rootPose, absPoses[i], radius, v);
535+
536+ // draw link to parent
537+ auto parentIndex = skeleton->getParentIndex(i);
538+ if (parentIndex >= 0) {
539+ assert(parentIndex < skeleton->getNumJoints());
540+ addLink(rootPose, absPoses[i], absPoses[parentIndex], radius, color, v);
541+ }
542+ }
543+ }
485544
486545 // draw markers from shared DebugDraw singleton
487546 for (auto& iter : markerMap) {

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