Try to fix uploaded mesh rotations - code from Avination code base.
parent
85f32f184c
commit
f99ba6f506
|
@ -641,25 +641,40 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
grp.AddPart(prim);
|
grp.AddPart(prim);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix first link number
|
Vector3 rootPos = positions[0];
|
||||||
|
|
||||||
if (grp.Parts.Length > 1)
|
if (grp.Parts.Length > 1)
|
||||||
|
{
|
||||||
|
// Fix first link number
|
||||||
grp.RootPart.LinkNum++;
|
grp.RootPart.LinkNum++;
|
||||||
|
|
||||||
Vector3 rootPos = positions[0];
|
Quaternion rootRotConj = Quaternion.Conjugate(rotations[0]);
|
||||||
grp.AbsolutePosition = rootPos;
|
Quaternion tmprot;
|
||||||
for (int i = 0; i < positions.Count; i++)
|
Vector3 offset;
|
||||||
|
|
||||||
|
// fix children rotations and positions
|
||||||
|
for (int i = 1; i < rotations.Count; i++)
|
||||||
|
{
|
||||||
|
tmprot = rotations[i];
|
||||||
|
tmprot = rootRotConj * tmprot;
|
||||||
|
|
||||||
|
grp.Parts[i].RotationOffset = tmprot;
|
||||||
|
|
||||||
|
offset = positions[i] - rootPos;
|
||||||
|
|
||||||
|
offset *= rootRotConj;
|
||||||
|
grp.Parts[i].OffsetPosition = offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
grp.AbsolutePosition = rootPos;
|
||||||
|
grp.UpdateGroupRotationR(rotations[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
Vector3 offset = positions[i] - rootPos;
|
grp.AbsolutePosition = rootPos;
|
||||||
grp.Parts[i].OffsetPosition = offset;
|
grp.UpdateGroupRotationR(rotations[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < rotations.Count; i++)
|
|
||||||
{
|
|
||||||
if (i != 0)
|
|
||||||
grp.Parts[i].RotationOffset = rotations[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
grp.UpdateGroupRotationR(rotations[0]);
|
|
||||||
data = ASCIIEncoding.ASCII.GetBytes(SceneObjectSerializer.ToOriginalXmlFormat(grp));
|
data = ASCIIEncoding.ASCII.GetBytes(SceneObjectSerializer.ToOriginalXmlFormat(grp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue