This commit is contained in:
ousttrue 2025-09-09 16:34:48 +09:00
parent 6c5b02fb15
commit c14b32645f

View File

@ -140,6 +140,12 @@ namespace UniVRM10
return new float[] { -v.x, v.y, v.z };
}
static float[] ReverseX(Quaternion q)
{
q = UniGLTF.Axes.X.Create().InvertQuaternion(q);
return new float[] { q.x, q.y, q.z, q.w };
}
///
/// 必要な容量を計算
/// (sparseは考慮してないので大きめ)
@ -444,6 +450,65 @@ namespace UniVRM10
GravityDir = ReverseX(y.m_gravityDir),
GravityPower = y.m_gravityPower,
};
switch (y.m_anglelimitType)
{
case UniGLTF.SpringBoneJobs.AnglelimitTypes.Cone:
{
var limit = new UniGLTF.Extensions.VRMC_springBone_limit.VRMC_springBone_limit
{
Limit = new UniGLTF.Extensions.VRMC_springBone_limit.Limit
{
Cone = new UniGLTF.Extensions.VRMC_springBone_limit.ConeLimit
{
Rotation = ReverseX(y.m_angleLimitRotation),
Angle = y.m_angleLimitAngle1,
}
}
};
glTFExtension extensions = default;
UniGLTF.Extensions.VRMC_springBone_limit.GltfSerializer.SerializeTo(ref extensions, limit);
joint.Extensions = extensions;
break;
}
case UniGLTF.SpringBoneJobs.AnglelimitTypes.Hinge:
{
var limit = new UniGLTF.Extensions.VRMC_springBone_limit.VRMC_springBone_limit
{
Limit = new UniGLTF.Extensions.VRMC_springBone_limit.Limit
{
Hinge = new UniGLTF.Extensions.VRMC_springBone_limit.HingeLimit
{
Rotation = ReverseX(y.m_angleLimitRotation),
Angle = y.m_angleLimitAngle1,
}
}
};
glTFExtension extensions = default;
UniGLTF.Extensions.VRMC_springBone_limit.GltfSerializer.SerializeTo(ref extensions, limit);
joint.Extensions = extensions;
break;
}
case UniGLTF.SpringBoneJobs.AnglelimitTypes.Spherical:
{
var limit = new UniGLTF.Extensions.VRMC_springBone_limit.VRMC_springBone_limit
{
Limit = new UniGLTF.Extensions.VRMC_springBone_limit.Limit
{
Spherical = new UniGLTF.Extensions.VRMC_springBone_limit.SphericalLimit
{
Rotation = ReverseX(y.m_angleLimitRotation),
Theta = y.m_angleLimitAngle1,
Phi = y.m_angleLimitAngle2,
}
}
};
glTFExtension extensions = default;
UniGLTF.Extensions.VRMC_springBone_limit.GltfSerializer.SerializeTo(ref extensions, limit);
joint.Extensions = extensions;
break;
}
}
return joint;
}