diff --git a/src/DebugTools/Implementation/AxisAlignedBoxRenderer.cpp b/src/DebugTools/Implementation/AxisAlignedBoxRenderer.cpp index 09d4af8b7..87b7ab1b6 100644 --- a/src/DebugTools/Implementation/AxisAlignedBoxRenderer.cpp +++ b/src/DebugTools/Implementation/AxisAlignedBoxRenderer.cpp @@ -27,8 +27,8 @@ template AxisAlignedBoxRenderer::AxisAligne template void AxisAlignedBoxRenderer::draw(Resource& options, const typename DimensionTraits::MatrixType& projectionMatrix) { /* Half scale, because the box is 2x2(x2) */ typename DimensionTraits::MatrixType transformation = - DimensionTraits::MatrixType::translation(axisAlignedBox.transformedPosition())* - DimensionTraits::MatrixType::scaling(axisAlignedBox.transformedSize()/2); + DimensionTraits::MatrixType::translation((axisAlignedBox.transformedMin()+axisAlignedBox.transformedMax())/2)* + DimensionTraits::MatrixType::scaling((axisAlignedBox.transformedMax()-axisAlignedBox.transformedMin())/2); this->shader->setTransformationProjectionMatrix(projectionMatrix*transformation) ->setColor(options->color()) ->use(); diff --git a/src/Physics/AxisAlignedBox.cpp b/src/Physics/AxisAlignedBox.cpp index 9c2f004cf..026dd62c5 100644 --- a/src/Physics/AxisAlignedBox.cpp +++ b/src/Physics/AxisAlignedBox.cpp @@ -21,8 +21,8 @@ namespace Magnum { namespace Physics { template void AxisAlignedBox::applyTransformationMatrix(const typename DimensionTraits::MatrixType& matrix) { - _transformedPosition = (matrix*typename DimensionTraits::PointType(_position)).vector(); - _transformedSize = matrix.rotationScaling()*_size; + _transformedMin = (matrix*typename DimensionTraits::PointType(_min)).vector(); + _transformedMax = (matrix*typename DimensionTraits::PointType(_max)).vector(); } template class AxisAlignedBox<2>; diff --git a/src/Physics/AxisAlignedBox.h b/src/Physics/AxisAlignedBox.h index ed642b966..1f92ecf36 100644 --- a/src/Physics/AxisAlignedBox.h +++ b/src/Physics/AxisAlignedBox.h @@ -34,7 +34,7 @@ namespace Magnum { namespace Physics { template class MAGNUM_PHYSICS_EXPORT AxisAlignedBox: public AbstractShape { public: /** @brief Constructor */ - inline explicit AxisAlignedBox(const typename DimensionTraits::VectorType& position, const typename DimensionTraits::VectorType& size): _position(position), _transformedPosition(position), _size(size), _transformedSize(size) {} + inline explicit AxisAlignedBox(const typename DimensionTraits::VectorType& min, const typename DimensionTraits::VectorType& max): _min(min), _max(max), _transformedMin(min), _transformedMax(max) {} inline typename AbstractShape::Type type() const override { return AbstractShape::Type::AxisAlignedBox; @@ -42,37 +42,37 @@ template class MAGNUM_PHYSICS_EXPORT AxisAlignedBox: pu void applyTransformationMatrix(const typename DimensionTraits::MatrixType& matrix) override; - /** @brief Position */ - inline typename DimensionTraits::VectorType position() const { - return _position; + /** @brief Minimal coordinates */ + inline typename DimensionTraits::VectorType min() const { + return _min; } - /** @brief Set position */ - inline void setPosition(const typename DimensionTraits::VectorType& position) { - _position = position; + /** @brief Set minimal coordinates */ + inline void setMin(const typename DimensionTraits::VectorType& min) { + _min = min; } - /** @brief Size */ - inline typename DimensionTraits::VectorType size() const { return _size; } + /** @brief Maximal coordinates */ + inline typename DimensionTraits::VectorType max() const { return _max; } - /** @brief Set size */ - inline void setSize(const typename DimensionTraits::VectorType& size) { - _size = size; + /** @brief Set maximal coordinates */ + inline void setMax(const typename DimensionTraits::VectorType& max) { + _max = max; } - /** @brief Transformed position */ - inline typename DimensionTraits::VectorType transformedPosition() const { - return _transformedPosition; + /** @brief Transformed minimal coordinates */ + inline typename DimensionTraits::VectorType transformedMin() const { + return _transformedMin; } - /** @brief Transformed size */ - inline typename DimensionTraits::VectorType transformedSize() const { - return _transformedSize; + /** @brief Transformed maximal coordinates */ + inline typename DimensionTraits::VectorType transformedMax() const { + return _transformedMax; } private: - typename DimensionTraits::VectorType _position, _transformedPosition, - _size, _transformedSize; + typename DimensionTraits::VectorType _min, _max, + _transformedMin, _transformedMax; }; /** @brief Two-dimensional axis-aligned box */ diff --git a/src/Physics/Test/AxisAlignedBoxTest.cpp b/src/Physics/Test/AxisAlignedBoxTest.cpp index a9554d30d..3ef7f3827 100644 --- a/src/Physics/Test/AxisAlignedBoxTest.cpp +++ b/src/Physics/Test/AxisAlignedBoxTest.cpp @@ -35,13 +35,9 @@ AxisAlignedBoxTest::AxisAlignedBoxTest() { void AxisAlignedBoxTest::applyTransformation() { Physics::AxisAlignedBox3D box({-1.0f, -2.0f, -3.0f}, {1.0f, 2.0f, 3.0f}); - box.applyTransformationMatrix(Matrix4::scaling({2.0f, -1.0f, 1.5f})); - CORRADE_COMPARE(box.transformedPosition(), Vector3(-2.0f, 2.0f, -4.5f)); - CORRADE_COMPARE(box.transformedSize(), Vector3(2.0f, -2.0f, 4.5f)); - - box.applyTransformationMatrix(Matrix4::translation(Vector3(1.0f))*Matrix4::rotation(deg(90.0f), Vector3::xAxis())); - CORRADE_COMPARE(box.transformedPosition(), Vector3(0.0f, 4.0f, -1.0f)); - CORRADE_COMPARE(box.transformedSize(), Vector3(1.0f, -3.0f, 2.0f)); + box.applyTransformationMatrix(Matrix4::translation(Vector3(1.0f))*Matrix4::scaling({2.0f, -1.0f, 1.5f})); + CORRADE_COMPARE(box.transformedMin(), Vector3(-1.0f, 3.0f, -3.5f)); + CORRADE_COMPARE(box.transformedMax(), Vector3(3.0f, -1.0f, 5.5f)); } }}}