Fix T44102: Mirrored objects render black with Blender Internal and Autosmooth.
Normals are not vertices, we cannot apply matrix's scale to them...
This commit is contained in:
parent
0f0e080a26
commit
4685092fd8
@ -577,6 +577,17 @@ static void autosmooth(Render *UNUSED(re), ObjectRen *obr, float mat[4][4], shor
|
||||
VlakRen *vlr;
|
||||
int a, totvert;
|
||||
|
||||
float rot[3][3];
|
||||
|
||||
/* Note: For normals, we only want rotation, not scaling component.
|
||||
* Negative scales (aka mirroring) give wrong results, see T44102. */
|
||||
if (lnors) {
|
||||
float mat3[3][3], size[3];
|
||||
|
||||
copy_m3_m4(mat3, mat);
|
||||
mat3_to_rot_size(rot, size, mat3);
|
||||
}
|
||||
|
||||
if (obr->totvert == 0)
|
||||
return;
|
||||
|
||||
@ -611,9 +622,8 @@ static void autosmooth(Render *UNUSED(re), ObjectRen *obr, float mat[4][4], shor
|
||||
ver = RE_findOrAddVert(obr, a);
|
||||
mul_m4_v3(mat, ver->co);
|
||||
if (lnors) {
|
||||
mul_mat3_m4_v3(mat, ver->n);
|
||||
mul_m3_v3(rot, ver->n);
|
||||
negate_v3(ver->n);
|
||||
normalize_v3(ver->n);
|
||||
}
|
||||
}
|
||||
for (a = 0; a < obr->totvlak; a++) {
|
||||
|
Loading…
Reference in New Issue
Block a user