From 120c6dc8506647d3edd33e533bba65bb9bc081c8 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Fri, 3 Jan 2020 12:34:11 -0600 Subject: [PATCH] DolphinQt: Fix accelerometer indicator math. --- .../Core/DolphinQt/Config/Mapping/MappingIndicator.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Source/Core/DolphinQt/Config/Mapping/MappingIndicator.cpp b/Source/Core/DolphinQt/Config/Mapping/MappingIndicator.cpp index cf9c042599..8e81b380d5 100644 --- a/Source/Core/DolphinQt/Config/Mapping/MappingIndicator.cpp +++ b/Source/Core/DolphinQt/Config/Mapping/MappingIndicator.cpp @@ -724,12 +724,11 @@ void AccelerometerMappingIndicator::paintEvent(QPaintEvent*) p.setRenderHint(QPainter::SmoothPixmapTransform, true); const auto angle = std::acos(state.Normalized().Dot({0, 0, 1})); - const auto axis = state.Normalized().Cross({0, 0, 1}).Normalized(); + const auto axis = state.Normalized().Cross({0, 0, 1}); - // Odd checks to handle case of 0g (draw no sphere) and perfect up/down orientation. - const auto rotation = (!state.LengthSquared() || axis.LengthSquared() < 2) ? - Common::Matrix33::Rotate(angle, axis) : - Common::Matrix33::Identity(); + // Check that axis is non-zero to handle perfect up/down orientations. + const auto rotation = Common::Matrix33::Rotate( + angle, axis.LengthSquared() ? axis.Normalized() : Common::Vec3{0, 1, 0}); // Draw sphere. p.setPen(Qt::NoPen);