summaryrefslogtreecommitdiff
path: root/indra/llappearance/llavatarappearance.cpp
diff options
context:
space:
mode:
authorGai Clary <gaia.clary@machinimatrix.org>2026-04-13 23:45:38 +0200
committerGitHub <noreply@github.com>2026-04-14 00:45:38 +0300
commit3ca4bf1ac0a3b26e961579a86869181104c11b5f (patch)
tree56ba1e8dd9cf25d24210813dbbe98c68e1f14ce6 /indra/llappearance/llavatarappearance.cpp
parent4926a066dd5c502d9d2c155a323936ea6e8cb8e0 (diff)
#5639 Fix glTF collision volume bind reconstruction
The glTF importer rebuilt collision volume override-rest matrices from the imported translation override and viewer-side scale only. That dropped the collision volume rotation defined in avatar_skeleton.xml and produced incorrect inverse bind matrices for rotated collision volumes, especially the torso volumes that use non-uniform scale. The result was a visible mismatch between rigged mesh imported from .glb and the equivalent .dae upload.
Diffstat (limited to 'indra/llappearance/llavatarappearance.cpp')
-rw-r--r--indra/llappearance/llavatarappearance.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp
index d2862a5215..c8fd2cba70 100644
--- a/indra/llappearance/llavatarappearance.cpp
+++ b/indra/llappearance/llavatarappearance.cpp
@@ -1647,10 +1647,10 @@ glm::mat4 LLAvatarBoneInfo::getJointMatrix()
glm::mat4 mat(1.0f);
// 1. Scaling
mat = glm::scale(mat, glm::vec3(mScale[0], mScale[1], mScale[2]));
- // 2. Rotation (Euler angles rad)
- mat = glm::rotate(mat, mRot[0], glm::vec3(1, 0, 0));
- mat = glm::rotate(mat, mRot[1], glm::vec3(0, 1, 0));
- mat = glm::rotate(mat, mRot[2], glm::vec3(0, 0, 1));
+ // 2. Rotation (avatar_skeleton.xml stores Euler angles in degrees)
+ mat = glm::rotate(mat, glm::radians(mRot[0]), glm::vec3(1, 0, 0));
+ mat = glm::rotate(mat, glm::radians(mRot[1]), glm::vec3(0, 1, 0));
+ mat = glm::rotate(mat, glm::radians(mRot[2]), glm::vec3(0, 0, 1));
// 3. Position
mat = glm::translate(mat, glm::vec3(mPos[0], mPos[1], mPos[2]));
return mat;