[Bf-blender-cvs] [ed9540b33be] tmp-transform-navigate: Fix zoom shifting offset in ortho view

Germano Cavalcante noreply at git.blender.org
Fri Mar 4 17:24:58 CET 2022


Commit: ed9540b33bef1a79ad4cf7f0ba7802c72f63b8d1
Author: Germano Cavalcante
Date:   Fri Mar 4 13:09:35 2022 -0300
Branches: tmp-transform-navigate
https://developer.blender.org/rBed9540b33bef1a79ad4cf7f0ba7802c72f63b8d1

Fix zoom shifting offset in ortho view

===================================================================

M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_input.c

===================================================================

diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index ca20ef58759..ed0a6a4bbb6 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1202,8 +1202,20 @@ void calculateCenter(TransInfo *t)
  * Adjusts the mouse position relative to the object. */
 void tranformViewUpdate(TransInfo *t)
 {
+  float zoom_prev = t->zfac;
+  float zoom_new;
   if ((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW)) {
+    if (!t->persp) {
+      zoom_prev *= len_v3(t->persinv[0]);
+    }
+
     setTransformViewMatrices(t);
+    calculateZfac(t);
+
+    zoom_new = t->zfac;
+    if (!t->persp) {
+      zoom_new *= len_v3(t->persinv[0]);
+    }
 
     for (int i = 0; i < ARRAY_SIZE(t->orient); i++) {
       if (t->orient[i].type == V3D_ORIENT_VIEW) {
@@ -1216,16 +1228,13 @@ void tranformViewUpdate(TransInfo *t)
       }
     }
   }
-
-  float fac = 1.0f;
-  if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE, SPACE_NODE)) {
-    float zfac_prev = t->zfac;
+  else {
     calculateZfac(t);
-    fac = zfac_prev / t->zfac;
+    zoom_new = t->zfac;
   }
 
   calculateCenter2D(t);
-  transform_input_update(t, fac);
+  transform_input_update(t, zoom_prev / zoom_new);
 }
 
 void calculatePropRatio(TransInfo *t)
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index 72a8bc752e1..38dbe742279 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -266,10 +266,9 @@ void initMouseInput(
   mi->imval[1] = mval[1];
 
   if ((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW)) {
-    RegionView3D *rv3d = t->region->regiondata;
-    float z = dot_m4_v3_row_z(rv3d->persmat, t->center_global) + rv3d->persmat[3][2];
-    float z_ndc = 0.5f * (1.0f + (z / t->zfac));
-    ED_view3d_depth_unproject_v3(t->region, mval, z_ndc, mi->imval_unproj);
+    float delta[3] = {mval[0] - center[0], mval[1] - center[1]};
+    ED_view3d_win_to_delta(t->region, delta, t->zfac, delta);
+    add_v3_v3v3(mi->imval_unproj, t->center_global, delta);
   }
 
   mi->post = NULL;



More information about the Bf-blender-cvs mailing list