浏览代码

Avoid crash when generating LODs on meshes with non-finite vertices.

(cherry picked from commit acf76027bd2926ed2a9538f992ad6a7c9888d518)
Lyuma 1 年之前
父节点
当前提交
299413157a
共有 1 个文件被更改,包括 4 次插入0 次删除
  1. 4 0
      scene/resources/importer_mesh.cpp

+ 4 - 0
scene/resources/importer_mesh.cpp

@@ -514,6 +514,10 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
 					const Vector3 &v2 = vertices_ptr[new_indices_ptr[j + 2]];
 					Vector3 face_normal = vec3_cross(v0 - v2, v0 - v1);
 					float face_area = face_normal.length(); // Actually twice the face area, since it's the same error_factor on all faces, we don't care
+					if (!Math::is_finite(face_area) || face_area == 0) {
+						WARN_PRINT_ONCE("Ignoring face with non-finite normal in LOD generation.");
+						continue;
+					}
 
 					Vector3 dir = face_normal / face_area;
 					int ray_count = CLAMP(5.0 * face_area * error_factor, 16, 64);