6 Transform::Transform():
7 position(0.0f, 0.0f, 0.0f),
8 euler(Angle::zero(), Angle::zero(), Angle::zero()),
9 scale(1.0f, 1.0f, 1.0f)
12 void Transform::set_position(const Vector3 &p)
17 void Transform::set_euler(const AngleVector3 &e)
22 void Transform::set_scale(const Vector3 &s)
27 Matrix Transform::to_matrix() const
30 result.translate(position);
31 result.rotate(euler.z, Vector3(0.0f, 0.0f, 1.0f));
32 result.rotate(euler.y, Vector3(0.0f, 1.0f, 0.0f));
33 result.rotate(euler.x, Vector3(1.0f, 0.0f, 0.0f));
39 Transform::Loader::Loader(Transform &t):
40 DataFile::ObjectLoader<Transform>(t)
42 add("position", &Loader::position);
43 add("euler", &Loader::euler);
44 add("rotation", &Loader::rotation);
45 add("scale_uniform", &Loader::scale_uniform);
46 add("scale", &Loader::scale);
49 void Transform::Loader::position(float x, float y, float z)
51 obj.position = Vector3(x, y, z);
54 void Transform::Loader::euler(float x, float y, float z)
56 obj.euler = AngleVector3(Angle::from_degrees(x), Angle::from_degrees(y), Angle::from_degrees(z));
59 void Transform::Loader::rotation(float a, float x, float y, float z)
61 Matrix matrix = Matrix::rotation(Angle::from_degrees(a), Vector3(x, y, z));
62 obj.euler.z = Geometry::atan2<float>(matrix(1, 0), matrix(0, 0));
63 matrix = Matrix::rotation(-obj.euler.z, Vector3(0.0f, 0.0f, 1.0f))*matrix;
64 obj.euler.y = Geometry::atan2<float>(matrix(2, 0), matrix(0, 0));
65 matrix = Matrix::rotation(-obj.euler.y, Vector3(0.0f, 1.0f, 0.0f))*matrix;
66 obj.euler.x = Geometry::atan2<float>(matrix(2, 1), matrix(1, 1));
69 void Transform::Loader::scale_uniform(float s)
71 obj.scale = Vector3(s, s, s);
74 void Transform::Loader::scale(float x, float y, float z)
76 obj.scale = Vector3(x, y, z);