fix: MC - proper vert_idx init + validate triTable entries to prevent SEGFAULT on incomplete table
This commit is contained in:
@@ -131,7 +131,8 @@ MCMesh marching_cubes(const std::function<double(double,double,double)>& f,
|
||||
if (edge_mask == 0) continue;
|
||||
|
||||
// Compute interpolated vertices for intersected edges
|
||||
int vert_idx[12] = {-1};
|
||||
int vert_idx[12];
|
||||
for (int& v : vert_idx) v = -1;
|
||||
for (int e = 0; e < 12; ++e) {
|
||||
if (!(edge_mask & (1 << e))) continue;
|
||||
int v0 = kEdgeCorners[e][0], v1 = kEdgeCorners[e][1];
|
||||
@@ -148,10 +149,12 @@ MCMesh marching_cubes(const std::function<double(double,double,double)>& f,
|
||||
}
|
||||
}
|
||||
|
||||
// Triangulate from standard table
|
||||
// Triangulate from standard table (validate entries: 0..11)
|
||||
const int* tris = kTriTable[cube_idx];
|
||||
for (int t = 0; tris[t] != -1; t += 3) {
|
||||
if (tris[t+2] == -1) break;
|
||||
for (int t = 0; t < 15 && tris[t] != -1; t += 3) {
|
||||
if (tris[t] < 0 || tris[t] > 11 || tris[t+1] < 0 || tris[t+1] > 11
|
||||
|| tris[t+2] < 0 || tris[t+2] > 11) break;
|
||||
if (vert_idx[tris[t]] < 0 || vert_idx[tris[t+1]] < 0 || vert_idx[tris[t+2]] < 0) break;
|
||||
result.triangles.push_back({
|
||||
vert_idx[tris[t]], vert_idx[tris[t+1]], vert_idx[tris[t+2]]
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user