Quaternion Camera DirectX - катание при изменении высоты и рысканияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Quaternion Camera DirectX - катание при изменении высоты и рыскания

Сообщение Anonymous »

Хорошо, я сейчас делаю свой маленький двигатель с помощью DirectX11. Я получил много вещей, работающих, и решил вернуться в свой класс Transform, чтобы сделать его немного более отточенным. Я изменил свое вращение с использования чистых углов Euler на использование кватернионов, и именно тогда все сломалось ... < /p>
Теперь, когда я вращаю свою камеру (сейчас чисто изменяет шаг и рыскания) в конце концов моя камера каким -то образом свернута. Поиск интернета привел меня к переключению порядка умножения кучи матриц и кватернионов, но это не сработало.void FreeMovement::HandleRotation(float deltaTime)
{
// Get data
Transform* pTransform = GetGameObject()->GetTransform();
InputManager* pInput = InputManager::GetInstance();

Rotator cameraRotation = pTransform->GetLocalRotation();
const float deltaAngle = m_RotateSpeed * deltaTime;

// Handle input
if (pInput->IsKeyPressed(VK_LEFT))
{
cameraRotation = Rotator::FromAxisAngle(Vector3::Up(), -deltaAngle) * cameraRotation;
}
if (pInput->IsKeyPressed(VK_RIGHT))
{
cameraRotation = Rotator::FromAxisAngle(Vector3::Up(), deltaAngle) * cameraRotation;
}

if (pInput->IsKeyPressed(VK_UP))
{
cameraRotation = Rotator::FromAxisAngle(Vector3::Right(), -deltaAngle) * cameraRotation;
}
if (pInput->IsKeyPressed(VK_DOWN))
{
cameraRotation = Rotator::FromAxisAngle(Vector3::Right(), deltaAngle) * cameraRotation;
}

// Set data
cameraRotation.Normalize();
pTransform->SetLocalRotation(cameraRotation);
}
< /code>
fromaxisangle () и размножение ротатора: < /p>
DirectX_Rotator DirectX_Rotator::FromAxisAngle(const Vector3& axis, float angle)
{
return DirectX_Rotator{ DirectX::XMQuaternionRotationAxis(axis.GetVector(), angle * toRadians) };
}

DirectX_Rotator DirectX_Rotator::operator* (const DirectX_Rotator& other) const
{
return DirectX_Rotator{ DirectX::XMQuaternionMultiply(GetVector(), other.GetVector()) };
}
< /code>
Существует также класс преобразования и /или мировой и видовой матрицы, которую я могу показать, если это необходимо.
или более, просто спросите. Но это потому, что я использую ключевое слово «использование», на случай, если я хотел разрешить различные API -интерфейсы рендеринга.

Подробнее здесь: https://stackoverflow.com/questions/794 ... ch-and-yaw
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»