9 requires(std::is_base_of_v<mobject::AbsMObject, T> &&
10 std::is_base_of_v<mobject::PositionableMObject<T>, T> &&
11 std::is_base_of_v<mobject::ScalableMObject<T>, T> &&
12 std::is_base_of_v<mobject::RotatableMObject<T>, T>)
19 mutable mat model_matrox_cache_ = mat::eye();
26 return mobject_->pos().is_changed() ||
27 mobject_->rotation().is_changed() ||
28 mobject_->scale().is_changed();
34 {mobject_->scale_x(), mobject_->scale_y(), 1.0f}),
35 mobject_->rotation().value().z(), {0.0f, 0.0f, 1.0f}),
36 {mobject_->pos().value().x(), mobject_->pos().value().y(), 0.0f});
37 mobject_->pos().reset_changed();
38 mobject_->rotation().reset_changed();
39 mobject_->scale().reset_changed();
42 if (model_matrix_should_update()) {
43 update_model_matrix();
45 return model_matrox_cache_;
47 T*
mobject()
const {
return (T*)mobject_; }
mat & model_matrix() const
bool model_matrix_should_update() const
~SingleComposedMObjectWrapper()=default
SingleComposedMObjectWrapper(T *mobject)
void set_mobject(T *mobject)
void update_model_matrix() const
xcal::mobject::AbsMGroup * mobject() const
constexpr mat< _Tp, _len, _len > translate(const mat< _Tp, _len, _len > &m, const vec< _Tp, _vlen > &v)
Apply translation for matrix
mat< _Tp, _dim, _dim > rotate(const mat< _Tp, _dim, _dim > &m, _Tp angle, const vec< _Tp, _length > &axis)
Apply rotation for transform or rotation matrix around an axis
constexpr mat< _Tp, _dim, _dim > scale(const mat< _Tp, _dim, _dim > &m, const vec< _ATp, _dim - 1 > &v)
Apply translation to a matrix