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:
parent
95d57386b0
commit
28532b990b
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue