6void xcal::camera::AbsCamera::update_view_matrix()
const {
10 const vec3 eye = position_.
value();
11 const vec3 center = target_.
value();
14 const vec3 f = (center - eye).normalize();
15 const vec3 r = f.cross(
up).normalize();
16 const vec3 u = r.cross(f);
18 auto& V = view_matrix_cache_;
25 V[0][3] = -r.dot(eye);
29 V[1][3] = -u.dot(eye);
39 view_or_projection_has_changed_ =
true;
42 return position_.is_changed() || target_.is_changed() || up_.is_changed();
45 if (projection_should_update() || view_should_update() ||
46 view_or_projection_has_changed_)
47 _D(
"should_update(): "
48 << (projection_should_update() ?
"projection should update" :
"")
49 << (view_should_update() ?
"view should update" :
"")
50 << (view_or_projection_has_changed_
51 ?
"view or projection has changed"
53 return projection_should_update() || view_should_update() ||
54 view_or_projection_has_changed_;
57 if (should_update()) {
58 pv_matrix_cache_ = projection_matrix() ^ view_matrix();
59 view_or_projection_has_changed_ =
false;
61 return pv_matrix_cache_;
64 view_or_projection_has_changed_ =
true;
68 return view_matrix_cache_;
const xcmath::mat< float_t, 4, 4 > & view_matrix() const
获取视图矩阵
void projection_has_changed() const
标记投影矩阵已改变
bool_t should_update() const
检查相机矩阵是否需要更新
property::Vec< float_t, 3 > & up()
获取相机上方向(可修改)
bool_t view_should_update() const
检查视图矩阵是否需要更新
const xcmath::mat< float_t, 4, 4 > & pv_matrix() const
获取投影视图矩阵(PV矩阵)
void reset_changed() const
constexpr _Tp & x()
Get the item at index 0