From 4c3e80b4f12c189afcadbc9150af6b4961e1de46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 20 Jan 2013 01:26:48 +0100 Subject: [PATCH] SceneGraph: added AbstractObject::transformationMatrix(). Complement for Object::transformation(), usable from features which don't want/need to upcast AbstractObject pointer. --- src/SceneGraph/AbstractObject.h | 7 +++++++ src/SceneGraph/Object.h | 4 ++++ src/SceneGraph/Test/ObjectTest.cpp | 2 ++ 3 files changed, 13 insertions(+) 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(),