彻底抛弃虚拟面

This commit is contained in:
hesuicong committed 2026-07-23 10:40:44 +08:00
1 parent 56ad2c49cb
commit fb20fcf2c6
1 file changed
+13 -1
+13 -1
View File
@@ -14872,7 +14872,7 @@ bool MeshTexture::ConvertVectorToVirtualFaceDataArr(const std::vector<VirtualFac
}
bool MeshTexture::CreateVirtualFacesForExistingUV(VirtualFaceMap& virtualFaceMap) {
DEBUG_EXTRA("Creating virtual faces for existing UV texture mapping");
// 0. 详细的输入验证
DEBUG_EXTRA("=== Detailed Input Validation ===");
DEBUG_EXTRA("Scene pointer: %p", &scene);
@@ -14889,6 +14889,12 @@ bool MeshTexture::CreateVirtualFacesForExistingUV(VirtualFaceMap& virtualFaceMap
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数组的大小
size_t numFaces = scene.mesh.faces.size();
size_t numVertices = scene.mesh.vertices.size();
@@ -18734,6 +18740,12 @@ bool Scene::TextureMesh(unsigned nResolutionLevel, unsigned nMinResolution, unsi
return false;
}
// ✅✅✅ 关键修复:重新计算拓扑(否则 faceFaces 是坏的)
mesh.ListIncidenteFaces();
mesh.ListIncidenteFaceFaces();
mesh.ComputeNormalFaces();
mesh.ListBoundaryVertices();
// 纯可见性计算(初始化faceNeighbors)
if (!texture.ComputePureFaceVisibility(fOutlierThreshold, nIgnoreMaskLabel, views)) {
// ❗ 兜底:如果ComputePureFaceVisibility没初始化faceNeighbors,手动填充