Я потратил годы, пытаясь разработать способ создания векторного вектора любого импортированного объекта, чтобы я мог закончить элементы управления игроков, а также добавить афишу. Это для университетского проекта, где мне был предоставлен класс GameObject для загрузки в объекты с использованием класса MeshLoader и OBJLoader. В настоящее время я использую A .GetWorld(); который возвращает мне XMFLOAT4X4, который должен дать мне данные объекта в мире. Затем я конвертирую его в XMMATRIX с помощью XMLoadFloat4X4, а затем захватываю каждую строку данных из этой матрицы в свой собственный XMVECTOR. Я проверил их и верю, что они находятся в правильном порядке, но у меня все еще проблема с тем, что мой персонаж никогда не двигается, когда я нажимаю клавишу «вперед». Я задавался вопросом, если я делаю что-то совершенно неправильное или я просто что-то пропустил.Движущаяся и импортированная модель вдоль вперед Vector - DirectX11 C++
else if (GetAsyncKeyState(VK_UP))
{
XMFLOAT4X4 currrentWorld = _zaz.GetWorld();
XMMATRIX currentWorldM = XMLoadFloat4x4(&currrentWorld);
XMVECTOR scale = currentWorldM.r[1];
XMVECTOR rotation = currentWorldM.r[2];
XMVECTOR translation = currentWorldM.r[3];
XMVECTOR forward = currentWorldM.r[4];
forward = XMVector3Normalize(forward);
translation = XMVectorAdd(translation, forward);
newWorld = XMMATRIX(scale, rotation, translation, forward);
_zaz.SetWorld(&newWorld);
_zaz.UpdateWorld();
}
Другая проблема заключается в том, что «_zaz.UpdateWorld(); кажется, работает только внутри моего метода обновления, несмотря на то, что все элементы управления клавиатурой проверяются при обновлении.
void GameObject::UpdateWorld()
{
XMMATRIX scale = XMLoadFloat4x4(&_scale);
XMMATRIX rotate = XMLoadFloat4x4(&_rotate);
XMMATRIX translate = XMLoadFloat4x4(&_translate);
XMStoreFloat4x4(&_world, scale * rotate * translate);
}
void GameObject::SetWorld(XMMATRIX* world)
{
XMStoreFloat4x4(&_world, *world);
}
Это, безусловно, чтение в значениях, я получаю игру, чтобы разорвать на клавишу «вверх» нажат, который должен запустить приведенный выше код. Все значения установлены. Машина в настоящее время вращается, и если я слегка повернуте автомобиль, а затем сломаю игру, изменится только поворот и форвардные векторы, что должно быть в порядке?
Если у вас есть какие-либо идеи, что помогло бы в широком масштабе.
Я предположил, что это было бы похоже на:
else if (GetAsyncKeyState(VK_CONTROL))
{
XMFLOAT4 position = _cameraFree.GetEye();
XMFLOAT4 direction = _cameraFree.GetForward();
position.x -= (direction.x * 0.05f);
position.y -= (direction.y * 0.05f);
position.z -= (direction.z * 0.05f);
_cameraFree.SetEye(position);
_cameraFree.CalculateViewProjection();
}
который использует XMFLOAT4 для данных камер, что было легко сделать, С XMFLOAT4X4-х и XMMATRIX о том, что мой GameObject полагаться на него до сих пор было невозможно добраться до работы. Если больше информации, которую я могу предоставить, чтобы помочь, пожалуйста, скажите!
Надеюсь, это поможет вам помочь.
Я забыл добавить, что _zaz - это GameObject, который я хочу перемещать по сцене. –
Не переписываете переменную '_world' в' UpdateWorld'? Вы пересчитываете это «с нуля», полностью игнорируя то, что было установлено через «SetWorld»? – UnholySheep
Ну, что меня смущает, UpdateWorld создает мировую матрицу из SetTransition, SetRotation и SetScale, которые все принимают только по 3 поплавков для (X, Y, Z) для каждого –