Browse Source

Merge pull request #59039 from MythTitans/fix-smoothed-normals-computation

Fix mixed smoothed and non-smoothed face normals computation for CSG shapes
Rémi Verschelde 3 years ago
parent
commit
d5076439e4
1 changed files with 11 additions and 9 deletions
  1. 11 9
      modules/csg/csg_shape.cpp

+ 11 - 9
modules/csg/csg_shape.cpp

@@ -303,17 +303,19 @@ void CSGShape3D::_update_shape() {
 		ERR_CONTINUE(mat < -1 || mat >= face_count.size());
 		int idx = mat == -1 ? face_count.size() - 1 : mat;
 
-		Plane p(n->faces[i].vertices[0], n->faces[i].vertices[1], n->faces[i].vertices[2]);
+		if (n->faces[i].smooth) {
+			Plane p(n->faces[i].vertices[0], n->faces[i].vertices[1], n->faces[i].vertices[2]);
 
-		for (int j = 0; j < 3; j++) {
-			Vector3 v = n->faces[i].vertices[j];
-			Vector3 add;
-			if (vec_map.lookup(v, add)) {
-				add += p.normal;
-			} else {
-				add = p.normal;
+			for (int j = 0; j < 3; j++) {
+				Vector3 v = n->faces[i].vertices[j];
+				Vector3 add;
+				if (vec_map.lookup(v, add)) {
+					add += p.normal;
+				} else {
+					add = p.normal;
+				}
+				vec_map.set(v, add);
 			}
-			vec_map.set(v, add);
 		}
 
 		face_count.write[idx]++;