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.
This commit is contained in:
parent
e5d4a0c559
commit
145270d8d7
Notes:
blender-bot
2023-02-14 09:36:46 +01:00
Referenced by issue #90427, Center View to Mouse broken
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue