Try to fix uploaded mesh rotations - code from Avination code base.

0.7.4-extended
Melanie 2013-02-05 20:09:02 +00:00 committed by Justin Clark-Casey (justincc)
parent 85f32f184c
commit f99ba6f506
1 changed files with 28 additions and 13 deletions

View File

@ -641,25 +641,40 @@ namespace OpenSim.Region.ClientStack.Linden
grp.AddPart(prim);
}
// Fix first link number
Vector3 rootPos = positions[0];
if (grp.Parts.Length > 1)
{
// Fix first link number
grp.RootPart.LinkNum++;
Vector3 rootPos = positions[0];
grp.AbsolutePosition = rootPos;
for (int i = 0; i < positions.Count; i++)
Quaternion rootRotConj = Quaternion.Conjugate(rotations[0]);
Quaternion tmprot;
Vector3 offset;
// fix children rotations and positions
for (int i = 1; i < rotations.Count; i++)
{
Vector3 offset = positions[i] - rootPos;
tmprot = rotations[i];
tmprot = rootRotConj * tmprot;
grp.Parts[i].RotationOffset = tmprot;
offset = positions[i] - rootPos;
offset *= rootRotConj;
grp.Parts[i].OffsetPosition = offset;
}
for (int i = 0; i < rotations.Count; i++)
grp.AbsolutePosition = rootPos;
grp.UpdateGroupRotationR(rotations[0]);
}
else
{
if (i != 0)
grp.Parts[i].RotationOffset = rotations[i];
grp.AbsolutePosition = rootPos;
grp.UpdateGroupRotationR(rotations[0]);
}
grp.UpdateGroupRotationR(rotations[0]);
data = ASCIIEncoding.ASCII.GetBytes(SceneObjectSerializer.ToOriginalXmlFormat(grp));
}