[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41247] trunk/blender/source/blender/ render/intern/source/convertblender.c: fix for render normals flip when neg .

Morten Mikkelsen mikkelsen7 at gmail.com
Mon Oct 24 14:46:27 CEST 2011


Revision: 41247
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41247
Author:   mmikkelsen
Date:     2011-10-24 12:46:26 +0000 (Mon, 24 Oct 2011)
Log Message:
-----------
fix for render normals flip when neg. scale

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-10-24 12:43:08 UTC (rev 41246)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2011-10-24 12:46:26 UTC (rev 41247)
@@ -3345,9 +3345,7 @@
 				mul_m4_v3(mat, ver->co);
 				mul_transposed_m3_v3(imat, ver->n);
 				normalize_v3(ver->n);
-
-				if(!negative_scale)
-					negate_v3(ver->n);
+				negate_v3(ver->n);
 			}
   
 			if(orco) {
@@ -3405,10 +3403,11 @@
 						
 						if( mface->mat_nr==a1 ) {
 							float len;
-								
-							v1= mface->v1;
+							int reverse_verts = negative_scale!=0 && do_autosmooth==0;
+							int rev_tab[] = {reverse_verts==0 ? 0 : 2, 1, reverse_verts==0 ? 2 : 0, 3};
+							v1= reverse_verts==0 ? mface->v1 : mface->v3;
 							v2= mface->v2;
-							v3= mface->v3;
+							v3= reverse_verts==0 ? mface->v3 : mface->v1;
 							v4= mface->v4;
 							flag= mface->flag & ME_SMOOTH;
 
@@ -3445,36 +3444,40 @@
 								CustomDataLayer *layer;
 								MTFace *mtface, *mtf;
 								MCol *mcol, *mc;
-								int index, mtfn= 0, mcn= 0, mtng=0;
+								int index, mtfn= 0, mcn= 0, mtng=0, vindex;
 								char *name;
+								int nr_verts = v4!=0 ? 4 : 3;
 
 								for(index=0; index<dm->faceData.totlayer; index++) {
 									layer= &dm->faceData.layers[index];
 									name= layer->name;
 									
 									if(layer->type == CD_MTFACE && mtfn < MAX_MTFACE) {
+										int t;
 										mtf= RE_vlakren_get_tface(obr, vlr, mtfn++, &name, 1);
 										mtface= (MTFace*)layer->data;
-										*mtf= mtface[a];
+										*mtf= mtface[a];	// copy face info
+										for(vindex=0; vindex<nr_verts; vindex++)
+											for(t=0; t<2; t++)
+												mtf->uv[vindex][t]=mtface[a].uv[rev_tab[vindex]][t];
 									}
 									else if(layer->type == CD_MCOL && mcn < MAX_MCOL) {
 										mc= RE_vlakren_get_mcol(obr, vlr, mcn++, &name, 1);
 										mcol= (MCol*)layer->data;
-										memcpy(mc, &mcol[a*4], sizeof(MCol)*4);
+										for(vindex=0; vindex<nr_verts; vindex++)
+											mc[vindex]=mcol[a*4+rev_tab[vindex]];
 									}
 									else if(layer->type == CD_TANGENT && mtng < 1)
 									{
 										if(need_nmap_tangent!=0)
 										{
 											const float * tangent = (const float *) layer->data;
-											int t;
-											int nr_verts = v4!=0 ? 4 : 3;
 											float * ftang = RE_vlakren_get_nmap_tangent(obr, vlr, 1);
-											for(t=0; t<nr_verts; t++)
+											for(vindex=0; vindex<nr_verts; vindex++)
 											{
-												QUATCOPY(ftang+t*4, tangent+a*16+t*4);
-												mul_mat3_m4_v3(mat, ftang+t*4);
-												normalize_v3(ftang+t*4);
+												QUATCOPY(ftang+vindex*4, tangent+a*16+rev_tab[vindex]*4);
+												mul_mat3_m4_v3(mat, ftang+vindex*4);
+												normalize_v3(ftang+vindex*4);
 											}
 										}
 									}




More information about the Bf-blender-cvs mailing list