6 : m_Position(vPosition)
7 , m_Rotation(qRotation)
13 : m_Rotation(qRotation)
22 res.m_Position = vPosition;
23 res.m_Rotation = qRotation;
31 res.m_Position.SetZero();
33 res.m_Scale.Set(1.0f);
39 const plSimdQuat invRot = -globalTransformParent.m_Rotation;
40 const plSimdVec4f invScale = globalTransformParent.m_Scale.GetReciprocal();
43 res.m_Position = (invRot * (globalTransformChild.m_Position - globalTransformParent.m_Position)).CompMul(invScale);
44 res.m_Rotation = invRot * globalTransformChild.m_Rotation;
45 res.m_Scale = invScale.CompMul(globalTransformChild.m_Scale);
51 return globalTransformParent * localTransformChild;
56 return m_Scale.Abs().HorizontalMax<3>();
66 const plSimdFloat fEpsilon = plMath::DefaultEpsilon<float>();
67 return m_Scale.x().IsEqual(m_Scale.y(), fEpsilon) && m_Scale.x().IsEqual(m_Scale.z(), fEpsilon);
72 return m_Position.IsEqual(rhs.m_Position, fEpsilon).AllSet<3>() && m_Rotation.
IsEqualRotation(rhs.m_Rotation, fEpsilon) &&
73 m_Scale.IsEqual(rhs.m_Scale, fEpsilon).AllSet<3>();
85 plSimdVec4f invPos = invRot * (invScale.CompMul(-m_Position));
94 result.m_col0 *= m_Scale.x();
95 result.m_col1 *= m_Scale.y();
96 result.m_col2 *= m_Scale.z();
97 result.m_col3 = m_Position;
98 result.m_col3.SetW(1.0f);
107 return m_Position + rotated;
113 return m_Rotation * scaled;
118 return t.TransformPosition(v);
125 t.m_Position = (lhs.m_Rotation * rhs.m_Position.CompMul(lhs.m_Scale)) + lhs.m_Position;
126 t.m_Rotation = lhs.m_Rotation * rhs.m_Rotation;
127 t.m_Scale = lhs.m_Scale.CompMul(rhs.m_Scale);
134 (*this) = (*this) * other;
140 t.m_Position = lhs.m_Position;
141 t.m_Rotation = lhs.m_Rotation * q;
142 t.m_Scale = lhs.m_Scale;
149 t.m_Position = rhs.m_Position;
150 t.m_Rotation = q * rhs.m_Rotation;
151 t.m_Scale = rhs.m_Scale;
157 m_Rotation = m_Rotation * q;
164 t.m_Position = lhs.m_Position + v;
165 t.m_Rotation = lhs.m_Rotation;
166 t.m_Scale = lhs.m_Scale;
175 t.m_Position = lhs.m_Position - v;
176 t.m_Rotation = lhs.m_Rotation;
177 t.m_Scale = lhs.m_Scale;
182PL_ALWAYS_INLINE
void plSimdTransform::operator+=(
const plSimdVec4f& v)
187PL_ALWAYS_INLINE
void plSimdTransform::operator-=(
const plSimdVec4f& v)
194 return (lhs.m_Position == rhs.m_Position).AllSet<3>() && lhs.m_Rotation == rhs.m_Rotation && (lhs.m_Scale == rhs.m_Scale).AllSet<3>();
199 return !(lhs == rhs);
static plSimdFloat MakeZero()
Creates an plSimdFloat that is initialized to zero.
Definition FPUFloat_inl.h:36
A 4x4 matrix class.
Definition SimdMat4f.h:7
plSimdMat4f GetAsMat4() const
Returns the Quaternion as a matrix.
Definition SimdQuat_inl.h:58
bool IsEqualRotation(const plSimdQuat &qOther, const plSimdFloat &fEpsilon) const
Determines whether this and qOther represent the same rotation. This is a rather slow operation.
Definition SimdQuat.cpp:82
static const plSimdQuat MakeIdentity()
Static function that returns a quaternion that represents the identity rotation (none).
Definition SimdQuat_inl.h:10
A 4-component SIMD vector class.
Definition SimdVec4f.h:8