Fix scale and refactor debug function

This commit is contained in:
luiscuenca 2019-04-25 14:54:40 -07:00
parent b10aca10d4
commit 080f891c9f
No known key found for this signature in database
GPG key ID: 2387ECD129A6961D
2 changed files with 25 additions and 28 deletions

View file

@ -374,43 +374,40 @@ void OtherAvatar::debugJointData() const {
const vec4 WHITE(1.0f, 1.0f, 1.0f, 1.0f);
const float AXIS_LENGTH = 0.1f;
AnimPoseVec jointPoses;
std::vector<QString> jointNames;
AnimPoseVec absoluteJointPoses;
AnimPose rigToAvatar = AnimPose(Quaternions::Y_180 * getWorldOrientation(), getWorldPosition());
bool drawBones = false;
for (int i = 0; i < jointData.size(); i++) {
float jointScale = skeletonData[i].defaultScale * getTargetScale();
auto jointRotation = rigToAvatar.rot() * (jointData[i].rotationIsDefaultPose ? skeletonData[i].defaultRotation : jointData[i].rotation);
auto jointTranslation = jointScale * (jointData[i].translationIsDefaultPose ? skeletonData[i].defaultTranslation : jointData[i].translation);
if (skeletonData[i].jointName == "Hips") {
jointTranslation = glm::vec3(0.0f);
float jointScale = skeletonData[i].defaultScale * getTargetScale() * METERS_PER_CENTIMETER;
auto absoluteRotation = jointData[i].rotationIsDefaultPose ? skeletonData[i].defaultRotation : jointData[i].rotation;
auto localJointTranslation = jointScale * (jointData[i].translationIsDefaultPose ? skeletonData[i].defaultTranslation : jointData[i].translation);
bool isHips = skeletonData[i].jointName == "Hips";
if (isHips) {
localJointTranslation = glm::vec3(0.0f);
drawBones = true;
}
jointPoses.push_back(AnimPose(jointRotation, jointTranslation));
jointNames.push_back(skeletonData[i].jointName);
}
QVector<AnimPose> worldFramePoses;
for (int i = 0; i < (int)jointPoses.size(); i++) {
auto& jointPose = jointPoses[i];
AnimPose absoluteParentPose;
int parentIndex = skeletonData[i].parentIndex;
if (parentIndex < worldFramePoses.size()) {
if (parentIndex != -1 && parentIndex < (int)absoluteJointPoses.size()) {
absoluteParentPose = absoluteJointPoses[parentIndex];
}
AnimPose absoluteJointPose = AnimPose(absoluteRotation, absoluteParentPose.trans() + absoluteParentPose.rot() * localJointTranslation);
auto jointPose = rigToAvatar * absoluteJointPose;
auto parentPose = rigToAvatar * absoluteParentPose;
if (drawBones) {
glm::vec3 xAxis = jointPose.rot() * Vectors::UNIT_X;
glm::vec3 yAxis = jointPose.rot() * Vectors::UNIT_Y;
glm::vec3 zAxis = jointPose.rot() * Vectors::UNIT_Z;
auto parentRotation = parentIndex > -1 ? jointPoses[parentIndex].rot() : Quaternions::IDENTITY;
auto parentPosition = parentIndex > -1 ? worldFramePoses[parentIndex].trans() : rigToAvatar.trans();
auto jointPosition = parentPosition + parentRotation * (jointPose.trans() * METERS_PER_CENTIMETER);
worldFramePoses.push_back(AnimPose(jointPose.rot(), jointPosition));
DebugDraw::getInstance().drawRay(jointPosition, jointPosition + AXIS_LENGTH * xAxis, jointData[i].rotationIsDefaultPose ? LIGHT_RED : RED);
DebugDraw::getInstance().drawRay(jointPosition, jointPosition + AXIS_LENGTH * yAxis, jointData[i].rotationIsDefaultPose ? LIGHT_GREEN : GREEN);
DebugDraw::getInstance().drawRay(jointPosition, jointPosition + AXIS_LENGTH * zAxis, jointData[i].rotationIsDefaultPose ? LIGHT_BLUE : BLUE);
// draw line to parent
if (parentIndex != -1) {
DebugDraw::getInstance().drawRay(jointPosition, parentPosition, jointData[i].translationIsDefaultPose ? WHITE : GREY);
DebugDraw::getInstance().drawRay(jointPose.trans(), jointPose.trans() + AXIS_LENGTH * xAxis, jointData[i].rotationIsDefaultPose ? LIGHT_RED : RED);
DebugDraw::getInstance().drawRay(jointPose.trans(), jointPose.trans() + AXIS_LENGTH * yAxis, jointData[i].rotationIsDefaultPose ? LIGHT_GREEN : GREEN);
DebugDraw::getInstance().drawRay(jointPose.trans(), jointPose.trans() + AXIS_LENGTH * zAxis, jointData[i].rotationIsDefaultPose ? LIGHT_BLUE : BLUE);
if (!isHips) {
DebugDraw::getInstance().drawRay(jointPose.trans(), parentPose.trans(), jointData[i].translationIsDefaultPose ? WHITE : GREY);
}
}
absoluteJointPoses.push_back(absoluteJointPose);
}
}
}

View file

@ -1454,7 +1454,7 @@ std::vector<AvatarSkeletonTrait::UnpackedJointData> Avatar::getSkeletonDefaultDa
if (_skeletonModel->isLoaded()) {
auto& model = _skeletonModel->getHFMModel();
auto& rig = _skeletonModel->getRig();
float geometryToRigScale = glm::length(extractScale(rig.getGeometryToRigTransform()));
float geometryToRigScale = extractScale(rig.getGeometryToRigTransform())[0];
QStringList jointNames = getJointNames();
int sizeCount = 0;
for (int i = 0; i < jointNames.size(); i++) {
@ -1468,7 +1468,7 @@ std::vector<AvatarSkeletonTrait::UnpackedJointData> Avatar::getSkeletonDefaultDa
}
jointData.defaultRotation = rig.getAbsoluteDefaultPose(i).rot();
jointData.defaultTranslation = getDefaultJointTranslation(i);
float jointLocalScale = glm::length(extractScale(model.joints[i].transform));
float jointLocalScale = extractScale(model.joints[i].transform)[0];
jointData.defaultScale = jointLocalScale / geometryToRigScale;
jointData.jointName = jointNames[i];
jointData.stringLength = jointNames[i].size();