Hyb*_*rid 5 c++ vector matrix quaternions
我的部分代码通过存储 xyz 位置、xyz 比例和四元数来存储 4x3 矩阵的等效项。下面的代码片段:
class tTransform
{
// data
tVector4f m_Position;
tQuaternion m_Rotation;
tVector4f m_Scale;
};
Run Code Online (Sandbox Code Playgroud)
我想将这些对象中的 2 个相乘,(好像它是矩阵乘法),并且想知道是否有比将每个对象转换为矩阵更快/更好的方法,以这种方式进行乘法,然后再次提取结果位置、旋转和缩放?
健康警告,因为这是来自记忆并且完全未经测试。您需要定义或替换tQuaternions 和tVector4s 的运算符。
class tTransform
{
// data
tVector4f m_Position;
tQuaternion m_Rotation;
tVector4f m_Scale;
public:
// World = Parent * Local (*this == parent)
tTransform operator * (const tTransform& localSpace)
{
tTransform worldSpace;
worldSpace.m_Position = m_Position +
m_Rotation * (localSpace.m_Position * m_Scale);
worldSpace.m_Rotation = m_Rotation * localSpace.m_Rotation;
worldSpace.m_Scale = m_Scale * (m_Rotation * localSpace.m_Scale);
return worldSpace;
}
// Local = World / Parent (*this = World)
tTransform operator / (const tTransform& parentSpace)
{
tTransform localSpace;
tQuaternion parentSpaceConjugate = parentSpace.m_Rotation.conjugate();
localSpace.m_Position = (parentSpaceConjugate *
(m_Position - parentSpace.m_Position)) /
parentSpace.m_Scale;
localSpace.m_Rotation = parentSpaceConjugate * m_Rotation;
localSpace.m_Scale = parentSpaceConjugate *
(m_Scale / parentSpace.m_Scale);
return localSpace;
}
};
Run Code Online (Sandbox Code Playgroud)