解决构建虚拟面邻居图时的一个崩溃Bug
This commit is contained in:
1 parent
617f8ea2b5
commit
982106fec2
1 file changed
+21
-3
@@ -6308,6 +6308,8 @@ bool MeshTexture::CreateVirtualFaces65(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG_EXTRA("结束稳定的虚拟面片创建逻辑");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8640,6 +8642,7 @@ bool MeshTexture::FaceViewSelection3( unsigned minCommonCameras, float fOutlierT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG_EXTRA("FaceViewSelection3.1");
|
||||||
// printf("perFaceFaces.size = %d\n", perFaceFaces.size());
|
// printf("perFaceFaces.size = %d\n", perFaceFaces.size());
|
||||||
|
|
||||||
ASSERT(controlCounter == faces.size());
|
ASSERT(controlCounter == faces.size());
|
||||||
@@ -8657,16 +8660,22 @@ bool MeshTexture::FaceViewSelection3( unsigned minCommonCameras, float fOutlierT
|
|||||||
const FIndex fAdj(adjFaces[i]);
|
const FIndex fAdj(adjFaces[i]);
|
||||||
if (fAdj == NO_ID)
|
if (fAdj == NO_ID)
|
||||||
continue;
|
continue;
|
||||||
if (mapFaceToVirtualFace[fAdj] == idxVF)
|
const FIndex virtualAdj = mapFaceToVirtualFace[fAdj];
|
||||||
|
if (virtualAdj == NO_ID)
|
||||||
continue;
|
continue;
|
||||||
if (fAdj != idxFace && vfNeighbors.Find(mapFaceToVirtualFace[fAdj]) == Mesh::FaceIdxArr::NO_INDEX) {
|
if (virtualAdj >= virtualFaces.size())
|
||||||
vfNeighbors.emplace_back(mapFaceToVirtualFace[fAdj]);
|
continue;
|
||||||
|
if (virtualAdj == idxVF)
|
||||||
|
continue;
|
||||||
|
if (vfNeighbors.Find(virtualAdj) == Mesh::FaceIdxArr::NO_INDEX) {
|
||||||
|
vfNeighbors.emplace_back(virtualAdj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//*/
|
//*/
|
||||||
}
|
}
|
||||||
|
DEBUG_EXTRA("FaceViewSelection3.2");
|
||||||
// 3) use virtual faces to build the graph
|
// 3) use virtual faces to build the graph
|
||||||
// 4) assign images to virtual faces
|
// 4) assign images to virtual faces
|
||||||
// 5) spread image ID to each mesh face from virtual face
|
// 5) spread image ID to each mesh face from virtual face
|
||||||
@@ -8674,21 +8683,30 @@ bool MeshTexture::FaceViewSelection3( unsigned minCommonCameras, float fOutlierT
|
|||||||
MAYBEUNUSED const Mesh::FIndex idx((Mesh::FIndex)boost::add_vertex(graph));
|
MAYBEUNUSED const Mesh::FIndex idx((Mesh::FIndex)boost::add_vertex(graph));
|
||||||
ASSERT(idx == idxFace);
|
ASSERT(idx == idxFace);
|
||||||
}
|
}
|
||||||
|
DEBUG_EXTRA("FaceViewSelection3.3");
|
||||||
//*
|
//*
|
||||||
FOREACH(idxVirtualFace, virtualFaces) {
|
FOREACH(idxVirtualFace, virtualFaces) {
|
||||||
const Mesh::FaceIdxArr& afaces = virtualFaceNeighbors[idxVirtualFace];
|
const Mesh::FaceIdxArr& afaces = virtualFaceNeighbors[idxVirtualFace];
|
||||||
for (FIndex idxVirtualFaceAdj : afaces) {
|
for (FIndex idxVirtualFaceAdj : afaces) {
|
||||||
|
// ✅ 防御性检查
|
||||||
|
if (idxVirtualFaceAdj == NO_ID)
|
||||||
|
continue;
|
||||||
|
if (idxVirtualFaceAdj >= virtualFaces.size())
|
||||||
|
continue;
|
||||||
if (idxVirtualFace >= idxVirtualFaceAdj)
|
if (idxVirtualFace >= idxVirtualFaceAdj)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const bool bInvisibleFace(virtualFacesDatas[idxVirtualFace].empty());
|
const bool bInvisibleFace(virtualFacesDatas[idxVirtualFace].empty());
|
||||||
const bool bInvisibleFaceAdj(virtualFacesDatas[idxVirtualFaceAdj].empty());
|
const bool bInvisibleFaceAdj(virtualFacesDatas[idxVirtualFaceAdj].empty());
|
||||||
if (bInvisibleFace || bInvisibleFaceAdj)
|
if (bInvisibleFace || bInvisibleFaceAdj)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
boost::add_edge(idxVirtualFace, idxVirtualFaceAdj, graph);
|
boost::add_edge(idxVirtualFace, idxVirtualFaceAdj, graph);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//*/
|
//*/
|
||||||
|
|
||||||
|
DEBUG_EXTRA("FaceViewSelection3.4");
|
||||||
// 这里通过深度图判断virtualFaces是否要为invalid
|
// 这里通过深度图判断virtualFaces是否要为invalid
|
||||||
// CheckInvalidFaces(virtualFacesDatas, fOutlierThreshold, nIgnoreMaskLabel, views, bUseVirtualFaces))
|
// CheckInvalidFaces(virtualFacesDatas, fOutlierThreshold, nIgnoreMaskLabel, views, bUseVirtualFaces))
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user