我有一个3d对象,我希望能够旋转它,然后向前移动它的新方向,但我的代码到目前为止旋转立方体,然后当你移动它移动它在默认轴而不是新的面向方向我的旋转和翻译代码和updateWorld如下
void GameObject::SetTranslation(float x, float y, float z)
{
XMMATRIX t = XMLoadFloat4x4(&_translate);
XMStoreFloat4x4(&_translate, XMMatrixTranslation(x, y, z) * t);
}
void GameObject::SetRotation(float x, float y, float z)
{
XMFLOAT4X4 tempRot;
XMStoreFloat4x4(&tempRot, XMMatrixRotationX(x) * XMMatrixRotationY(y) * XMMatrixRotationZ(z));
XMMATRIX r = XMLoadFloat4x4(&_rotate);
XMMATRIX tempRotate = XMLoadFloat4x4(&tempRot);
XMStoreFloat4x4(&_rotate, XMMatrixMultiply(r, tempRotate));
}
void GameObject::UpdateWorld()
{
XMMATRIX scale = XMLoadFloat4x4(&_scale);
XMMATRIX rotate = XMLoadFloat4x4(&_rotate);
XMMATRIX translate = XMLoadFloat4x4(&_translate);
XMStoreFloat4x4(&_world, scale *rotate * translate);
}
所以在检查用户输入后,将调用gameobjects updateworld
我想我可能会有乘法中缺少的顺序或东西,但我很困惑为什么它不会朝着新的方向移动
任何建议或帮助都会非常感谢
答案 0 :(得分:1)
Nico Schertler是令人惊叹的人!
哈哈,他帮助我解决了我的问题,而在这里苦苦挣扎的其他人就是我被告知的以及我是如何解决的。我不得不将新的转换应用到当前的世界矩阵,然后我坐了一会儿,想知道为什么它不工作,我不得不将矩阵重置为零,以便对下一个新的转换做出正确的改变< / p>
我的更新世界代码现在已添加到此类
XMStoreFloat4x4(&_world, scale * translate*rotate *world );
XMStoreFloat4x4(&_scale, XMMatrixIdentity());
XMStoreFloat4x4(&_rotate, XMMatrixIdentity());
XMStoreFloat4x4(&_translate, XMMatrixIdentity());