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);
                                                                                
        }
                                                                                
}
                                                                        }

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

Reply via email to