gpt4 book ai didi

c++ - 矩阵与位置、四元数和比例分量相乘

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:41 26 4
gpt4 key购买 nike

我的部分代码通过存储 xyz 位置、xyz 比例和四元数来存储 4x3 矩阵的等效项。下面的代码片段:

class tTransform
{

// data
tVector4f m_Position;
tQuaternion m_Rotation;
tVector4f m_Scale;

};

我想将这些对象中的 2 个相乘(就好像它是一个矩阵乘法),我想知道是否有比将每个对象转换为矩阵更快/更好的方法,以这种方式进行乘法, 然后再次提取结果位置、旋转和缩放?

最佳答案

健康警告,因为这是内存中的,完全未经测试。您需要为 tQuaterniontVector4 定义或替换运算符。

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;
}
};

关于c++ - 矩阵与位置、四元数和比例分量相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com