mirror of
https://github.com/JulianGro/overte.git
synced 2025-05-07 12:19:57 +02:00
Fix scale and refactor debug function
This commit is contained in:
parent
b10aca10d4
commit
080f891c9f
2 changed files with 25 additions and 28 deletions
|
@ -374,43 +374,40 @@ void OtherAvatar::debugJointData() const {
|
||||||
const vec4 WHITE(1.0f, 1.0f, 1.0f, 1.0f);
|
const vec4 WHITE(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
const float AXIS_LENGTH = 0.1f;
|
const float AXIS_LENGTH = 0.1f;
|
||||||
|
|
||||||
AnimPoseVec jointPoses;
|
AnimPoseVec absoluteJointPoses;
|
||||||
std::vector<QString> jointNames;
|
|
||||||
AnimPose rigToAvatar = AnimPose(Quaternions::Y_180 * getWorldOrientation(), getWorldPosition());
|
AnimPose rigToAvatar = AnimPose(Quaternions::Y_180 * getWorldOrientation(), getWorldPosition());
|
||||||
|
bool drawBones = false;
|
||||||
for (int i = 0; i < jointData.size(); i++) {
|
for (int i = 0; i < jointData.size(); i++) {
|
||||||
float jointScale = skeletonData[i].defaultScale * getTargetScale();
|
float jointScale = skeletonData[i].defaultScale * getTargetScale() * METERS_PER_CENTIMETER;
|
||||||
auto jointRotation = rigToAvatar.rot() * (jointData[i].rotationIsDefaultPose ? skeletonData[i].defaultRotation : jointData[i].rotation);
|
auto absoluteRotation = jointData[i].rotationIsDefaultPose ? skeletonData[i].defaultRotation : jointData[i].rotation;
|
||||||
auto jointTranslation = jointScale * (jointData[i].translationIsDefaultPose ? skeletonData[i].defaultTranslation : jointData[i].translation);
|
auto localJointTranslation = jointScale * (jointData[i].translationIsDefaultPose ? skeletonData[i].defaultTranslation : jointData[i].translation);
|
||||||
if (skeletonData[i].jointName == "Hips") {
|
bool isHips = skeletonData[i].jointName == "Hips";
|
||||||
jointTranslation = glm::vec3(0.0f);
|
if (isHips) {
|
||||||
|
localJointTranslation = glm::vec3(0.0f);
|
||||||
|
drawBones = true;
|
||||||
}
|
}
|
||||||
jointPoses.push_back(AnimPose(jointRotation, jointTranslation));
|
AnimPose absoluteParentPose;
|
||||||
jointNames.push_back(skeletonData[i].jointName);
|
|
||||||
}
|
|
||||||
QVector<AnimPose> worldFramePoses;
|
|
||||||
for (int i = 0; i < (int)jointPoses.size(); i++) {
|
|
||||||
auto& jointPose = jointPoses[i];
|
|
||||||
int parentIndex = skeletonData[i].parentIndex;
|
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 xAxis = jointPose.rot() * Vectors::UNIT_X;
|
||||||
glm::vec3 yAxis = jointPose.rot() * Vectors::UNIT_Y;
|
glm::vec3 yAxis = jointPose.rot() * Vectors::UNIT_Y;
|
||||||
glm::vec3 zAxis = jointPose.rot() * Vectors::UNIT_Z;
|
glm::vec3 zAxis = jointPose.rot() * Vectors::UNIT_Z;
|
||||||
|
|
||||||
auto parentRotation = parentIndex > -1 ? jointPoses[parentIndex].rot() : Quaternions::IDENTITY;
|
DebugDraw::getInstance().drawRay(jointPose.trans(), jointPose.trans() + AXIS_LENGTH * xAxis, jointData[i].rotationIsDefaultPose ? LIGHT_RED : RED);
|
||||||
auto parentPosition = parentIndex > -1 ? worldFramePoses[parentIndex].trans() : rigToAvatar.trans();
|
DebugDraw::getInstance().drawRay(jointPose.trans(), jointPose.trans() + AXIS_LENGTH * yAxis, jointData[i].rotationIsDefaultPose ? LIGHT_GREEN : GREEN);
|
||||||
auto jointPosition = parentPosition + parentRotation * (jointPose.trans() * METERS_PER_CENTIMETER);
|
DebugDraw::getInstance().drawRay(jointPose.trans(), jointPose.trans() + AXIS_LENGTH * zAxis, jointData[i].rotationIsDefaultPose ? LIGHT_BLUE : BLUE);
|
||||||
worldFramePoses.push_back(AnimPose(jointPose.rot(), jointPosition));
|
if (!isHips) {
|
||||||
|
DebugDraw::getInstance().drawRay(jointPose.trans(), parentPose.trans(), jointData[i].translationIsDefaultPose ? WHITE : GREY);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
absoluteJointPoses.push_back(absoluteJointPose);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1454,7 +1454,7 @@ std::vector<AvatarSkeletonTrait::UnpackedJointData> Avatar::getSkeletonDefaultDa
|
||||||
if (_skeletonModel->isLoaded()) {
|
if (_skeletonModel->isLoaded()) {
|
||||||
auto& model = _skeletonModel->getHFMModel();
|
auto& model = _skeletonModel->getHFMModel();
|
||||||
auto& rig = _skeletonModel->getRig();
|
auto& rig = _skeletonModel->getRig();
|
||||||
float geometryToRigScale = glm::length(extractScale(rig.getGeometryToRigTransform()));
|
float geometryToRigScale = extractScale(rig.getGeometryToRigTransform())[0];
|
||||||
QStringList jointNames = getJointNames();
|
QStringList jointNames = getJointNames();
|
||||||
int sizeCount = 0;
|
int sizeCount = 0;
|
||||||
for (int i = 0; i < jointNames.size(); i++) {
|
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.defaultRotation = rig.getAbsoluteDefaultPose(i).rot();
|
||||||
jointData.defaultTranslation = getDefaultJointTranslation(i);
|
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.defaultScale = jointLocalScale / geometryToRigScale;
|
||||||
jointData.jointName = jointNames[i];
|
jointData.jointName = jointNames[i];
|
||||||
jointData.stringLength = jointNames[i].size();
|
jointData.stringLength = jointNames[i].size();
|
||||||
|
|
Loading…
Reference in a new issue