Browse Source

彻底抛弃虚拟面

ManualUV
hesuicong 3 weeks ago
parent
commit
fb20fcf2c6
  1. 14
      libs/MVS/SceneTexture.cpp

14
libs/MVS/SceneTexture.cpp

@ -14872,7 +14872,7 @@ bool MeshTexture::ConvertVectorToVirtualFaceDataArr(const std::vector<VirtualFac
} }
bool MeshTexture::CreateVirtualFacesForExistingUV(VirtualFaceMap& virtualFaceMap) { bool MeshTexture::CreateVirtualFacesForExistingUV(VirtualFaceMap& virtualFaceMap) {
DEBUG_EXTRA("Creating virtual faces for existing UV texture mapping"); DEBUG_EXTRA("Creating virtual faces for existing UV texture mapping");
// 0. 详细的输入验证 // 0. 详细的输入验证
DEBUG_EXTRA("=== Detailed Input Validation ==="); DEBUG_EXTRA("=== Detailed Input Validation ===");
DEBUG_EXTRA("Scene pointer: %p", &scene); DEBUG_EXTRA("Scene pointer: %p", &scene);
@ -14889,6 +14889,12 @@ bool MeshTexture::CreateVirtualFacesForExistingUV(VirtualFaceMap& virtualFaceMap
return false; return false;
} }
virtualFaceMap.resize(scene.mesh.faces.size());
for (FIndex i = 0; i < (FIndex)scene.mesh.faces.size(); ++i) {
virtualFaceMap[i].faces = {i};
}
return true;
// 验证faces数组的大小 // 验证faces数组的大小
size_t numFaces = scene.mesh.faces.size(); size_t numFaces = scene.mesh.faces.size();
size_t numVertices = scene.mesh.vertices.size(); size_t numVertices = scene.mesh.vertices.size();
@ -18734,6 +18740,12 @@ bool Scene::TextureMesh(unsigned nResolutionLevel, unsigned nMinResolution, unsi
return false; return false;
} }
// ✅✅✅ 关键修复:重新计算拓扑(否则 faceFaces 是坏的)
mesh.ListIncidenteFaces();
mesh.ListIncidenteFaceFaces();
mesh.ComputeNormalFaces();
mesh.ListBoundaryVertices();
// 纯可见性计算(初始化faceNeighbors) // 纯可见性计算(初始化faceNeighbors)
if (!texture.ComputePureFaceVisibility(fOutlierThreshold, nIgnoreMaskLabel, views)) { if (!texture.ComputePureFaceVisibility(fOutlierThreshold, nIgnoreMaskLabel, views)) {
// ❗ 兜底:如果ComputePureFaceVisibility没初始化faceNeighbors,手动填充 // ❗ 兜底:如果ComputePureFaceVisibility没初始化faceNeighbors,手动填充

Loading…
Cancel
Save