|
|
|
@ -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,手动填充
|
|
|
|
|