X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Ftransform.cpp;h=6862221ba496fb5626736169c80789883c58cb7d;hp=ea5839fb32bfc3e9fd65529966c59ccbee467c37;hb=HEAD;hpb=13cf58be0e455227e8e5ae418b276a11c7873869 diff --git a/source/transform.cpp b/source/transform.cpp deleted file mode 100644 index ea5839fb..00000000 --- a/source/transform.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "transform.h" - -namespace Msp { -namespace GL { - -Transform::Transform(): - position(0.0f, 0.0f, 0.0f), - euler(Angle::zero(), Angle::zero(), Angle::zero()), - scale(1.0f, 1.0f, 1.0f) -{ } - -Transform Transform::from_matrix(const Matrix &matrix) -{ - Transform trn; - trn.position = matrix.column(3).slice<3>(0); - - trn.euler.z = Geometry::atan2(matrix(1, 0), matrix(0, 0)); - Matrix m = Matrix::rotation(-trn.euler.z, Vector3(0.0f, 0.0f, 1.0f))*matrix; - trn.euler.y = Geometry::atan2(m(2, 0), m(0, 0)); - m = Matrix::rotation(-trn.euler.y, Vector3(0.0f, 1.0f, 0.0f))*m; - trn.euler.x = Geometry::atan2(m(2, 1), m(1, 1)); - m = Matrix::rotation(-trn.euler.x, Vector3(1.0f, 0.0f, 0.0f))*m; - - trn.scale = Vector3(m(0, 0), m(1, 1), m(2, 2)); - - return trn; -} - -void Transform::set_position(const Vector3 &p) -{ - position = p; -} - -void Transform::set_euler(const AngleVector3 &e) -{ - euler = e; -} - -void Transform::set_rotation(const Angle &angle, const Vector3 &axis) -{ - euler = from_matrix(Matrix::rotation(angle, axis)).euler; -} - -void Transform::set_scale(float s) -{ - set_scale(Vector3(s, s, s)); -} - -void Transform::set_scale(const Vector3 &s) -{ - scale = s; -} - -Matrix Transform::to_matrix() const -{ - Matrix result; - result.translate(position); - result.rotate(euler.z, Vector3(0.0f, 0.0f, 1.0f)); - result.rotate(euler.y, Vector3(0.0f, 1.0f, 0.0f)); - result.rotate(euler.x, Vector3(1.0f, 0.0f, 0.0f)); - result.scale(scale); - return result; -} - - -Transform::Loader::Loader(Transform &t): - DataFile::ObjectLoader(t) -{ - add("position", &Loader::position); - add("euler", &Loader::euler); - add("rotation", &Loader::rotation); - add("scale", &Loader::scale_uniform); - add("scale", &Loader::scale); -} - -void Transform::Loader::position(float x, float y, float z) -{ - obj.set_position(Vector3(x, y, z)); -} - -void Transform::Loader::euler(float x, float y, float z) -{ - obj.set_euler(AngleVector3(Angle::from_degrees(x), Angle::from_degrees(y), Angle::from_degrees(z))); -} - -void Transform::Loader::rotation(float a, float x, float y, float z) -{ - obj.set_rotation(Angle::from_degrees(a), Vector3(x, y, z)); -} - -void Transform::Loader::scale_uniform(float s) -{ - obj.set_scale(s); -} - -void Transform::Loader::scale(float x, float y, float z) -{ - obj.set_scale(Vector3(x, y, z)); -} - -} // namespace GL -} // namespace Msp