[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53490] trunk/blender/intern/cycles: Fix to prevent undefined normals being generated with `add_face_normals()' , from triangles with zero area.

Stuart Broadfoot gbroadfoot at hotmail.com
Tue Jan 1 20:44:12 CET 2013


Revision: 53490
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53490
Author:   broadstu
Date:     2013-01-01 19:44:09 +0000 (Tue, 01 Jan 2013)
Log Message:
-----------
Fix to prevent undefined normals being generated with `add_face_normals()', from triangles with zero area.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_mesh.cpp
    trunk/blender/intern/cycles/render/mesh.cpp

Modified: trunk/blender/intern/cycles/blender/blender_mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_mesh.cpp	2013-01-01 19:02:08 UTC (rev 53489)
+++ trunk/blender/intern/cycles/blender/blender_mesh.cpp	2013-01-01 19:44:09 UTC (rev 53490)
@@ -223,11 +223,20 @@
 		int shader = used_shaders[mi];
 		bool smooth = f->use_smooth();
 
-		mesh->add_triangle(vi[0], vi[1], vi[2], shader, smooth);
+		if(n == 4) {
+			if(len_squared(cross(mesh->verts[vi[1]] - mesh->verts[vi[0]], mesh->verts[vi[2]] - mesh->verts[vi[0]])) == 0.0f ||
+				len_squared(cross(mesh->verts[vi[2]] - mesh->verts[vi[0]], mesh->verts[vi[3]] - mesh->verts[vi[0]])) == 0.0f) {
+				mesh->add_triangle(vi[0], vi[1], vi[3], shader, smooth);
+				mesh->add_triangle(vi[2], vi[3], vi[1], shader, smooth);
+			}
+			else {
+				mesh->add_triangle(vi[0], vi[1], vi[2], shader, smooth);
+				mesh->add_triangle(vi[0], vi[2], vi[3], shader, smooth);
+			}
+		}
+		else
+			mesh->add_triangle(vi[0], vi[1], vi[2], shader, smooth);
 
-		if(n == 4)
-			mesh->add_triangle(vi[0], vi[2], vi[3], shader, smooth);
-
 		nverts.push_back(n);
 	}
 

Modified: trunk/blender/intern/cycles/render/mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/render/mesh.cpp	2013-01-01 19:02:08 UTC (rev 53489)
+++ trunk/blender/intern/cycles/render/mesh.cpp	2013-01-01 19:44:09 UTC (rev 53490)
@@ -178,7 +178,12 @@
 			float3 v1 = verts_ptr[t.v[1]];
 			float3 v2 = verts_ptr[t.v[2]];
 
-			fN[i] = normalize(cross(v1 - v0, v2 - v0));
+			float3 norm = cross(v1 - v0, v2 - v0);
+			float normlen = len(norm);
+			if(normlen == 0.0f)
+				fN[i] = make_float3(0.0f, 0.0f, 0.0f);
+			else
+				fN[i] = norm / normlen;
 
 			if(flip)
 				fN[i] = -fN[i];




More information about the Bf-blender-cvs mailing list