xcal
基于 C++23 的现代图形渲染引擎
载入中...
搜索中...
未找到
singlemobjectwrapper.hpp
浏览该文件的文档.
1#pragma once
5#include <xcmath/xcmath.hpp>
6
8template <class T>
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>)
14 public:
16
17 protected:
18 T* mobject_{nullptr};
19 mutable mat model_matrox_cache_ = mat::eye();
20
21 public:
22 explicit SingleComposedMObjectWrapper(T* mobject) : mobject_(mobject) {};
24 void set_mobject(T* mobject) { mobject_ = mobject; }
26 return mobject_->pos().is_changed() ||
27 mobject_->rotation().is_changed() ||
28 mobject_->scale().is_changed();
29 }
30 void update_model_matrix() const {
31 model_matrox_cache_ = xcmath::translate(
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();
40 }
41 mat& model_matrix() const {
42 if (model_matrix_should_update()) {
43 update_model_matrix();
44 }
45 return model_matrox_cache_;
46 }
47 T* mobject() const { return (T*)mobject_; }
48 T* operator->() const { return (T*)mobject_; } // operator ->()
49};
50template <class T>
52 : public SingleComposedMObjectWrapper<xcal::mobject::AbsMGroup> {
53 public:
56 xcal::mobject::AbsMGroup>::SingleComposedMObjectWrapper;
58 return (xcal::mobject::AbsMGroup*)mobject_;
59 }
60 T* operator->() const {
61 return (T*)mobject_; // operator ->()
62 }
63};
64
65} // namespace xcal::render::opengl::utils
constexpr mat< _Tp, _len, _len > translate(const mat< _Tp, _len, _len > &m, const vec< _Tp, _vlen > &v)
Apply translation for matrix
Definition function.hpp:125
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
Definition function.hpp:54
constexpr mat< _Tp, _dim, _dim > scale(const mat< _Tp, _dim, _dim > &m, const vec< _ATp, _dim - 1 > &v)
Apply translation to a matrix
Definition function.hpp:160
#define XCAL_API
Definition public.h:69