Переглянути джерело

bugfix the three vertices are collinear when converting a polygon to a triangle.

Signed-off-by: Jackie9527 <[email protected]>
Jackie9527 2 роки тому
батько
коміт
f7f54036f2
1 змінених файлів з 15 додано та 0 видалено
  1. 15 0
      code/PostProcessing/TriangulateProcess.cpp

+ 15 - 0
code/PostProcessing/TriangulateProcess.cpp

@@ -468,6 +468,21 @@ bool TriangulateProcess::TriangulateMesh( aiMesh* pMesh)
                         continue;
                     }
 
+                    // Skip when three point is in a line
+                    aiVector2D left = *pnt0 - *pnt1;
+                    aiVector2D right = *pnt2 - *pnt1;
+
+                    left.Normalize();
+                    right.Normalize();
+                    auto mul = left * right;
+
+                    // if the angle is 0 or 180
+                    if (std::abs(mul - 1.f) < ai_epsilon || std::abs(mul + 1.f) < ai_epsilon) {
+                        // skip this ear
+                        ASSIMP_LOG_WARN("Skip a ear, due to its angle is near 0 or 180.");
+                        continue;
+                    }
+
                     // and no other point may be contained in this triangle
                     for ( tmp = 0; tmp < max; ++tmp) {