X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Ftransform.h;h=1d0aedddf71b3fe900ffc2b7689008759ef3939e;hp=01c783bd7aa3ede6fe428f85f28c4cb4878ff079;hb=8bc776f177c7cf9d0c6fd9590273f086d38c23ca;hpb=77ad5a1a89aa43d9a3c8c58abff1ae184510cec6 diff --git a/source/transform.h b/source/transform.h index 01c783bd..1d0aeddd 100644 --- a/source/transform.h +++ b/source/transform.h @@ -21,13 +21,39 @@ public: Loader(Transform &); private: + void position_x(float); + void position_y(float); + void position_z(float); void position(float, float, float); + void euler_x(float); + void euler_y(float); + void euler_z(float); void euler(float, float, float); void rotation(float, float, float, float); + void scale_x(float); + void scale_y(float); + void scale_z(float); void scale_uniform(float); void scale(float, float, float); }; + enum ComponentMask + { + NONE = 0, + POSITION_X = 1, + POSITION_Y = 2, + POSITION_Z = 4, + POSITION = POSITION_X|POSITION_Y|POSITION_Z, + EULER_X = 8, + EULER_Y = 16, + EULER_Z = 32, + EULER = EULER_X|EULER_Y|EULER_Z, + SCALE_X = 64, + SCALE_Y = 128, + SCALE_Z = 256, + SCALE = SCALE_X|SCALE_Y|SCALE_Z + }; + typedef Geometry::Angle Angle; typedef LinAl::Vector AngleVector3; @@ -35,6 +61,7 @@ private: Vector3 position; AngleVector3 euler; Vector3 scale; + ComponentMask mask; public: Transform(); @@ -49,10 +76,23 @@ public: const Vector3 &get_position() const { return position; } const AngleVector3 &get_euler() const { return euler; } const Vector3 &get_scale() const { return scale; } + ComponentMask get_mask() const { return mask; } Matrix to_matrix() const; }; +inline Transform::ComponentMask operator&(Transform::ComponentMask m1, Transform::ComponentMask m2) +{ return static_cast(static_cast(m1)&static_cast(m2)); } + +inline Transform::ComponentMask operator|(Transform::ComponentMask m1, Transform::ComponentMask m2) +{ return static_cast(static_cast(m1)|static_cast(m2)); } + +inline Transform::ComponentMask operator^(Transform::ComponentMask m1, Transform::ComponentMask m2) +{ return static_cast(static_cast(m1)^static_cast(m2)); } + +inline Transform::ComponentMask operator~(Transform::ComponentMask m) +{ return static_cast(~static_cast(m)); } + } // namespace GL } // namespace Msp