Rotations are stored as radians to reduce the number of conversions
This commit is contained in:
parent
8559f7d27c
commit
e15f7696e6
|
@ -127,8 +127,8 @@ namespace SHADE
|
||||||
// We store euler angle rotations separately to interface with transform quaternions.
|
// We store euler angle rotations separately to interface with transform quaternions.
|
||||||
// Reading quaternions are unreliable.
|
// Reading quaternions are unreliable.
|
||||||
|
|
||||||
SHVec3 localRotation; // Stored in degrees
|
SHVec3 localRotation; // Stored in Radians
|
||||||
SHVec3 worldRotation; // Stored in degrees
|
SHVec3 worldRotation; // Stored in Radians
|
||||||
|
|
||||||
SHTransform local; // Local TRS holds Local To World Transform
|
SHTransform local; // Local TRS holds Local To World Transform
|
||||||
SHTransform world;
|
SHTransform world;
|
||||||
|
|
|
@ -270,7 +270,7 @@ namespace SHADE
|
||||||
tf.world.position = SHVec3::Transform(tf.local.position, localToWorld);
|
tf.world.position = SHVec3::Transform(tf.local.position, localToWorld);
|
||||||
tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One);
|
tf.world.scale = tf.local.scale * (parent ? parent->GetLocalScale() : SHVec3::One);
|
||||||
|
|
||||||
SHVec3 worldRotRad, localRotRad;
|
|
||||||
|
|
||||||
if (convertRotation)
|
if (convertRotation)
|
||||||
{
|
{
|
||||||
|
@ -278,10 +278,11 @@ namespace SHADE
|
||||||
|
|
||||||
// Set the orientation
|
// Set the orientation
|
||||||
// Wrap rotations between -360 and 360 and convert to radians
|
// Wrap rotations between -360 and 360 and convert to radians
|
||||||
|
SHVec3 worldRotRad, localRotRad;
|
||||||
for (size_t i = 0; i < SHVec3::SIZE; ++i)
|
for (size_t i = 0; i < SHVec3::SIZE; ++i)
|
||||||
{
|
{
|
||||||
worldRotRad[i] = SHMath::DegreesToRadians(SHMath::Wrap(tf.worldRotation[i], -360.0f, 360.0f));
|
worldRotRad[i] = SHMath::Wrap(tf.worldRotation[i], -SHMath::TWO_PI, SHMath::TWO_PI);
|
||||||
localRotRad[i] = SHMath::DegreesToRadians(SHMath::Wrap(tf.localRotation[i], -360.0f, 360.0f));
|
localRotRad[i] = SHMath::Wrap(tf.localRotation[i], -SHMath::TWO_PI, SHMath::TWO_PI);
|
||||||
}
|
}
|
||||||
|
|
||||||
tf.world.orientation = SHQuaternion::FromEuler(worldRotRad);
|
tf.world.orientation = SHQuaternion::FromEuler(worldRotRad);
|
||||||
|
@ -292,14 +293,8 @@ namespace SHADE
|
||||||
tf.world.orientation = (parent ? parent->GetLocalOrientation() : SHQuaternion::Identity) * tf.local.orientation;
|
tf.world.orientation = (parent ? parent->GetLocalOrientation() : SHQuaternion::Identity) * tf.local.orientation;
|
||||||
|
|
||||||
// Set the euler angle rotations
|
// Set the euler angle rotations
|
||||||
worldRotRad = tf.world.orientation.ToEuler();
|
tf.worldRotation = tf.world.orientation.ToEuler();
|
||||||
localRotRad = tf.local.orientation.ToEuler();
|
tf.localRotation = tf.local.orientation.ToEuler();
|
||||||
|
|
||||||
for (size_t i = 0; i < SHVec3::SIZE; ++i)
|
|
||||||
{
|
|
||||||
tf.worldRotation[i] = SHMath::RadiansToDegrees(worldRotRad[i]);
|
|
||||||
tf.localRotation[i] = SHMath::RadiansToDegrees(localRotRad[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tf.world.ComputeTRS();
|
tf.world.ComputeTRS();
|
||||||
|
|
Loading…
Reference in New Issue