FIX: gizmo screen size

jira: STUDIO-10293

Change-Id: I0c8a2031e00a8133a838f9371d5b0eae868aedc0
This commit is contained in:
jun.zhang 2025-03-10 15:41:13 +08:00 committed by lane.wei
parent 53a551174e
commit f4d30cfd19
2 changed files with 24 additions and 10 deletions

View File

@ -205,15 +205,15 @@ void GLGizmoMove3D::on_render()
screen_scalling_matrix.data()[2 * 4 + 2] = 1.0f / t_zoom;
m_orient_matrix = m_orient_matrix * screen_scalling_matrix;
float space_size = 100.f;
float space_size = 120.f;
space_size *= GLGizmoBase::Grabber::GrabberSizeFactor;
#if ENABLE_FIXED_GRABBER
// x axis
m_grabbers[0].center = {m_bounding_box.max.x() + space_size, 0, 0};
m_grabbers[0].center = {space_size, 0, 0};
// y axis
m_grabbers[1].center = {0, m_bounding_box.max.y() + space_size,0};
m_grabbers[1].center = {0, space_size,0};
// z axis
m_grabbers[2].center = {0,0, m_bounding_box.max.z() + space_size};
m_grabbers[2].center = {0,0, space_size};
for (int i = 0; i < 3; ++i) {
m_grabbers[i].color = AXES_COLOR[i];

View File

@ -2051,9 +2051,7 @@ void Selection::render_sidebar_hints(const std::string& sidebar_field, bool unif
if (boost::starts_with(sidebar_field, "position"))
render_sidebar_position_hints(sidebar_field, *shader, base_matrix * orient_matrix);
else if (boost::starts_with(sidebar_field, "rotation"))
render_sidebar_rotation_hints(sidebar_field, *shader, base_matrix * orient_matrix);
else if (boost::starts_with(sidebar_field, "absolute_rotation"))
else if (boost::starts_with(sidebar_field, "rotation") || boost::starts_with(sidebar_field, "absolute_rotation"))
render_sidebar_rotation_hints(sidebar_field, *shader, base_matrix * orient_matrix);
else if (boost::starts_with(sidebar_field, "scale") || boost::starts_with(sidebar_field, "size"))
//BBS: GUI refactor: add uniform_scale from gizmo
@ -2628,7 +2626,14 @@ static std::array<float, 4> get_color(Axis axis)
void Selection::render_sidebar_position_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& model_matrix) const
{
const Camera& camera = wxGetApp().plater()->get_camera();
const Transform3d view_matrix = camera.get_view_matrix() * model_matrix;
Transform3d screen_scalling_matrix{ Transform3d::Identity() };
const auto& t_zoom = camera.get_zoom();
screen_scalling_matrix.data()[0 * 4 + 0] = 5.0f / t_zoom;
screen_scalling_matrix.data()[1 * 4 + 1] = 5.0f / t_zoom;
screen_scalling_matrix.data()[2 * 4 + 2] = 5.0f / t_zoom;
const Transform3d view_matrix = camera.get_view_matrix() * model_matrix * screen_scalling_matrix;
shader.set_uniform("projection_matrix", camera.get_projection_matrix());
if (boost::ends_with(sidebar_field, "x")) {
@ -2656,12 +2661,21 @@ void Selection::render_sidebar_position_hints(const std::string& sidebar_field,
void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field, GLShaderProgram& shader, const Transform3d& model_matrix) const
{
auto render_sidebar_rotation_hint = [this](GLShaderProgram& shader, const Transform3d& matrix) {
Transform3d view_model_matrix = matrix;
const Camera& camera = wxGetApp().plater()->get_camera();
Transform3d screen_scalling_matrix{ Transform3d::Identity() };
const auto& t_zoom = camera.get_zoom();
screen_scalling_matrix.data()[0 * 4 + 0] = 5.0f / t_zoom;
screen_scalling_matrix.data()[1 * 4 + 1] = 5.0f / t_zoom;
screen_scalling_matrix.data()[2 * 4 + 2] = 5.0f / t_zoom;
Transform3d view_model_matrix = matrix * screen_scalling_matrix;
shader.set_uniform("view_model_matrix", view_model_matrix);
shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose());
m_curved_arrow.render_geometry();
view_model_matrix = matrix * Geometry::assemble_transform(Vec3d::Zero(), PI * Vec3d::UnitZ());
view_model_matrix = matrix * Geometry::assemble_transform(Vec3d::Zero(), PI * Vec3d::UnitZ()) * screen_scalling_matrix;
shader.set_uniform("view_model_matrix", view_model_matrix);
shader.set_uniform("normal_matrix", (Matrix3d)view_model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose());
m_curved_arrow.render_geometry();