FIX:m_target of Camera is not updated

m_target of Camera is not updated in these api:  Camera::translate Camera::set_distance

Change-Id: I2a6a878700849e062fca7a65e53baa03d64312c4
(cherry picked from commit 835ee9fdea77259c155ceae4d3abe62385e7a853)
This commit is contained in:
zhou.xu 2023-05-10 15:16:11 +08:00 committed by Lane.Wei
parent 95d57386b0
commit 28532b990b
2 changed files with 12 additions and 1 deletions

View File

@ -56,6 +56,7 @@ void Camera::select_next_type()
void Camera::translate(const Vec3d& displacement) { void Camera::translate(const Vec3d& displacement) {
if (!displacement.isApprox(Vec3d::Zero())) { if (!displacement.isApprox(Vec3d::Zero())) {
m_view_matrix.translate(-displacement); m_view_matrix.translate(-displacement);
update_target();
} }
} }
@ -63,6 +64,7 @@ void Camera::set_target(const Vec3d& target)
{ {
//BBS do not check validation //BBS do not check validation
//const Vec3d new_target = validate_target(target); //const Vec3d new_target = validate_target(target);
update_target();
const Vec3d new_target = target; const Vec3d new_target = target;
const Vec3d new_displacement = new_target - m_target; const Vec3d new_displacement = new_target - m_target;
if (!new_displacement.isApprox(Vec3d::Zero())) { if (!new_displacement.isApprox(Vec3d::Zero())) {
@ -506,6 +508,8 @@ void Camera::set_distance(double distance)
if (m_distance != distance) { if (m_distance != distance) {
m_view_matrix.translate((distance - m_distance) * get_dir_forward()); m_view_matrix.translate((distance - m_distance) * get_dir_forward());
m_distance = distance; m_distance = distance;
update_target();
} }
} }
@ -591,7 +595,13 @@ Vec3d Camera::validate_target(const Vec3d& target) const
void Camera::update_zenit() void Camera::update_zenit()
{ {
m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0))); m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0))); }
void Camera::update_target() {
auto temptarget = get_position() + m_distance * get_dir_forward();
if (!(temptarget-m_target).isApprox(Vec3d::Zero())){
m_target = temptarget;
}
} }
} // GUI } // GUI

View File

@ -163,6 +163,7 @@ private:
void set_default_orientation(); void set_default_orientation();
Vec3d validate_target(const Vec3d& target) const; Vec3d validate_target(const Vec3d& target) const;
void update_zenit(); void update_zenit();
void update_target();
}; };
} // GUI } // GUI