У меня есть 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
я думаю, что у меня может быть заказ или что-то не хватает от умножения, но я очень смущен, почему он не движется в новом направлении
любые советы или помощь будут очень благодарны
Нико Шертлер - удивительные люди !!!
ха-ха, он помог мне решить мою проблему, и для других, кто борется здесь, это то, что мне сказали, и как я ее решил
я должен был применить новое преобразование к текущей мировой матрице, а затем я некоторое время сидел, задаваясь вопросом, почему он не работал, мне пришлось сбросить матрицу до нуля, чтобы внести правильное изменение в следующую новую трансформеру
мой код мирового обновления теперь добавлен в конец так, как это
XMStoreFloat4x4(&_world, scale * translate*rotate *world );
XMStoreFloat4x4(&_scale, XMMatrixIdentity());
XMStoreFloat4x4(&_rotate, XMMatrixIdentity());
XMStoreFloat4x4(&_translate, XMMatrixIdentity());