[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35875] trunk/blender/source/blender/ render/intern/source/convertblender.c: Fix #26637: another problem with recent normals change, objects with negative

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Mar 29 15:37:16 CEST 2011


Revision: 35875
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35875
Author:   blendix
Date:     2011-03-29 13:37:16 +0000 (Tue, 29 Mar 2011)
Log Message:
-----------
Fix #26637: another problem with recent normals change, objects with negative
scale did not get correct render normals.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2011-03-29 13:00:59 UTC (rev 35874)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2011-03-29 13:37:16 UTC (rev 35875)
@@ -3195,12 +3195,14 @@
 	int end, do_autosmooth=0, totvert = 0;
 	int use_original_normals= 0;
 	int recalc_normals = 0;	// false by default
+	int negative_scale;
 
 	me= ob->data;
 
 	mul_m4_m4m4(mat, ob->obmat, re->viewmat);
 	invert_m4_m4(ob->imat, mat);
 	copy_m3_m4(imat, ob->imat);
+	negative_scale= is_negative_m4(mat);
 
 	if(me->totvert==0)
 		return;
@@ -3282,13 +3284,13 @@
 			ver= RE_findOrAddVert(obr, obr->totvert++);
 			VECCOPY(ver->co, mvert->co);
 			if(do_autosmooth==0) {	/* autosmooth on original unrotated data to prevent differences between frames */
-				ver->n[0]=mvert->no[0];
-				ver->n[1]=mvert->no[1];
-				ver->n[2]=mvert->no[2];
+				normal_short_to_float_v3(ver->n, mvert->no);
 				mul_m4_v3(mat, ver->co);
 				mul_transposed_m3_v3(imat, ver->n);
 				normalize_v3(ver->n);
-				negate_v3(ver->n);
+
+				if(!negative_scale)
+					negate_v3(ver->n);
 			}
   
 			if(orco) {




More information about the Bf-blender-cvs mailing list