|
@@ -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) {
|
|
|
|