diff --git a/src/Math/Quaternion.h b/src/Math/Quaternion.h index 1d513f8bc..5b3bb6aa4 100644 --- a/src/Math/Quaternion.h +++ b/src/Math/Quaternion.h @@ -124,6 +124,13 @@ template class Quaternion { /** @brief Create quaternion from vector and scalar */ inline constexpr /*implicit*/ Quaternion(const Vector3& vector, T scalar): _vector(vector), _scalar(scalar) {} + /** + * @brief Create quaternion from vector + * + * Scalar is set to `0`. + */ + inline constexpr explicit Quaternion(const Vector3& vector): _vector(vector), _scalar(T(0)) {} + /** @brief Equality comparison */ inline bool operator==(const Quaternion& other) const { return _vector == other._vector && MathTypeTraits::equals(_scalar, other._scalar); diff --git a/src/Math/Test/QuaternionTest.cpp b/src/Math/Test/QuaternionTest.cpp index a254336bb..1503152dc 100644 --- a/src/Math/Test/QuaternionTest.cpp +++ b/src/Math/Test/QuaternionTest.cpp @@ -28,6 +28,7 @@ class QuaternionTest: public Corrade::TestSuite::Tester { void construct(); void constructDefault(); + void constructFromVector(); void addSubtract(); void negated(); void multiplyDivideScalar(); @@ -54,6 +55,7 @@ typedef Math::Vector3 Vector3; QuaternionTest::QuaternionTest() { addTests(&QuaternionTest::construct, &QuaternionTest::constructDefault, + &QuaternionTest::constructFromVector, &QuaternionTest::addSubtract, &QuaternionTest::negated, &QuaternionTest::multiplyDivideScalar, @@ -83,6 +85,10 @@ void QuaternionTest::constructDefault() { CORRADE_COMPARE(Quaternion(), Quaternion({0.0f, 0.0f, 0.0f}, {1.0f})); } +void QuaternionTest::constructFromVector() { + CORRADE_COMPARE(Quaternion({1.0f, 2.0f, 3.0f}), Quaternion({1.0f, 2.0f, 3.0f}, 0.0f)); +} + void QuaternionTest::addSubtract() { Quaternion a({1.0f, 3.0f, -2.0f}, -4.0f); Quaternion b({-0.5f, 1.4f, 3.0f}, 12.0f);