diff --git a/src/SceneGraph/AbstractObject.h b/src/SceneGraph/AbstractObject.h index e55f51154..56ab023c2 100644 --- a/src/SceneGraph/AbstractObject.h +++ b/src/SceneGraph/AbstractObject.h @@ -102,6 +102,13 @@ template class AbstractObject /** @{ @name Object transformation */ + /** + * @brief Transformation matrix + * + * @see Object::transformation() + */ + virtual typename DimensionTraits::MatrixType transformationMatrix() const = 0; + /** * @brief Transformation matrix relative to root object * diff --git a/src/SceneGraph/Object.h b/src/SceneGraph/Object.h index 9b5efdc6f..e94d0e84d 100644 --- a/src/SceneGraph/Object.h +++ b/src/SceneGraph/Object.h @@ -202,6 +202,10 @@ template class Object: public AbstractObject::MatrixType transformationMatrix() const override { + return Transformation::toMatrix(Transformation::transformation()); + } + inline typename DimensionTraits::MatrixType absoluteTransformationMatrix() const override { return Transformation::toMatrix(absoluteTransformation()); } diff --git a/src/SceneGraph/Test/ObjectTest.cpp b/src/SceneGraph/Test/ObjectTest.cpp index bf586bb10..09248ac5d 100644 --- a/src/SceneGraph/Test/ObjectTest.cpp +++ b/src/SceneGraph/Test/ObjectTest.cpp @@ -110,6 +110,8 @@ void ObjectTest::absoluteTransformation() { /* Proper transformation composition */ Object3D o(&s); o.translate(Vector3::xAxis(2.0f)); + CORRADE_COMPARE(o.transformation(), Matrix4::translation(Vector3::xAxis(2.0f))); + CORRADE_COMPARE(o.transformation(), o.transformationMatrix()); Object3D o2(&o); o2.rotateY(deg(90.0f)); CORRADE_COMPARE(o2.absoluteTransformation(),