Commit: 4ea6595af03dc888a82ef073681727f5e315f3d2 Author: Germano Cavalcante Date: Wed Aug 4 10:46:42 2021 -0300 Branches: soc-2021-uv-editor-improvements https://developer.blender.org/rB4ea6595af03dc888a82ef073681727f5e315f3d2
Fix T90427: Center View to Mouse broken rBfb87d236edb7 made the values returned by `projmat_dimensions` more standardized following the documentations. But the functions in Blender that called `projmat_dimensions` followed a proposal that these values corresponded to a distance of 1m of clip. Adjust these functions to follow the new algorithm. =================================================================== M source/blender/draw/intern/draw_manager_data.c M source/blender/gpu/intern/gpu_matrix.cc =================================================================== diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 2126385a352..af331c86a8b 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -1533,13 +1533,6 @@ static void draw_frustum_boundbox_calc(const float (*viewinv)[4], projmat_dimensions(projmat, &left, &right, &bottom, &top, &near, &far); - if (is_persp) { - left *= near; - right *= near; - bottom *= near; - top *= near; - } - r_bbox->vec[0][2] = r_bbox->vec[3][2] = r_bbox->vec[7][2] = r_bbox->vec[4][2] = -near; r_bbox->vec[0][0] = r_bbox->vec[3][0] = left; r_bbox->vec[4][0] = r_bbox->vec[7][0] = right; diff --git a/source/blender/gpu/intern/gpu_matrix.cc b/source/blender/gpu/intern/gpu_matrix.cc index 6eb9cb823d5..efa04568401 100644 --- a/source/blender/gpu/intern/gpu_matrix.cc +++ b/source/blender/gpu/intern/gpu_matrix.cc @@ -532,17 +532,17 @@ static void gpu_mul_invert_projmat_m4_unmapped_v3_with_precalc( const struct GPUMatrixUnproject_Precalc *precalc, float co[3]) { /* 'precalc->dims' is the result of 'projmat_dimensions(proj, ...)'. */ - co[0] = precalc->dims.xmin + co[0] * (precalc->dims.xmax - precalc->dims.xmin); - co[1] = precalc->dims.ymin + co[1] * (precalc->dims.ymax - precalc->dims.ymin); + co[0] = (float)scalenormd(precalc->dims.xmin, precalc->dims.xmax, co[0]); + co[1] = (float)scalenormd(precalc->dims.ymin, precalc->dims.ymax, co[1]); if (precalc->is_persp) { - co[2] = precalc->dims.zmax * precalc->dims.zmin / + co[2] = (precalc->dims.zmax * precalc->dims.zmin) / (precalc->dims.zmax + co[2] * (precalc->dims.zmin - precalc->dims.zmax)); - co[0] *= co[2]; - co[1] *= co[2]; + co[0] *= co[2] / precalc->dims.zmin; + co[1] *= co[2] / precalc->dims.zmin; } else { - co[2] = precalc->dims.zmin + co[2] * (precalc->dims.zmax - precalc->dims.zmin); + co[2] = (float)scalenormd(precalc->dims.zmin, precalc->dims.zmax, co[2]); } co[2] *= -1; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs