Revision: 38236
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38236
Author:   blendix
Date:     2011-07-08 15:58:00 +0000 (Fri, 08 Jul 2011)
Log Message:
-----------
Fix #27897: mesh with negative scale disappears while sculpting, clipping
planes were wrong in that case.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c     
2011-07-08 13:22:58 UTC (rev 38235)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c     
2011-07-08 15:58:00 UTC (rev 38236)
@@ -468,8 +468,9 @@
 
 void ED_view3d_calc_clipping(BoundBox *bb, float planes[4][4], bglMats *mats, 
rcti *rect)
 {
+       float modelview[4][4];
        double xs, ys, p[3];
-       short val;
+       int val, flip_sign, a;
 
        /* near zero floating point values can give issues with gluUnProject
                in side view on some implementations */
@@ -493,11 +494,21 @@
                VECCOPY(bb->vec[4+val], p);
        }
 
+       /* verify if we have negative scale. doing the transform before cross
+          product flips the sign of the vector compared to doing cross product
+          before transform then, so we correct for that. */
+       for(a=0; a<16; a++)
+               ((float*)modelview)[a] = mats->modelview[a];
+       flip_sign = is_negative_m4(modelview);
+
        /* then plane equations */
        for(val=0; val<4; val++) {
 
                normal_tri_v3(planes[val], bb->vec[val], 
bb->vec[val==3?0:val+1], bb->vec[val+4]);
 
+               if(flip_sign)
+                       negate_v3(planes[val]);
+
                planes[val][3]= - planes[val][0]*bb->vec[val][0]
                        - planes[val][1]*bb->vec[val][1]
                        - planes[val][2]*bb->vec[val][2];

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to