From 9ab39219b19398b001c0fef0ccee2d292cc773cd Mon Sep 17 00:00:00 2001 From: hesuicong Date: Wed, 10 Jun 2026 18:34:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E4=BD=B3=E8=A7=86=E5=9B=BE=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/MVS/SceneTexture.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/libs/MVS/SceneTexture.cpp b/libs/MVS/SceneTexture.cpp index 6bd7518..d2c4a34 100644 --- a/libs/MVS/SceneTexture.cpp +++ b/libs/MVS/SceneTexture.cpp @@ -5714,7 +5714,8 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView } // 如果夹角小于45度(cos(45°) ≈ 0.7071),则计入覆盖 - float fAngleThreshold = 0.7071; // 0.7071f + float fAngleThreshold1 = 0.671; // 0.7071f + float fAngleThreshold2 = 0.8071; // 0.7071f // 初始化数据结构 std::vector processedFaces(faces.size(), false); @@ -5796,10 +5797,15 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView const Normal& faceNormal = scene.mesh.faceNormals[idxFace]; const float cosAngle = cameraForward.dot(Point3f(faceNormal.x, faceNormal.y, faceNormal.z)); - if (cosAngle > fAngleThreshold) - { // 45度阈值 + if (cosAngle > fAngleThreshold2) + { coverageCount++; + // viewData.faceToIndexMap[idxFace] = idxFace; + } + + if (cosAngle > fAngleThreshold1) + { viewData.faceToIndexMap[idxFace] = idxFace; } } @@ -6006,13 +6012,14 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView IIndexArr filteredCams; - int nHitCount = 0; - int nMaxHit = 400; - int nMaxViewCoverage = 0; + int nHit = 0; + int nHitMax = 1; + int nViewCoverage = 0; + int nViewCoverageMax = -1; for (const auto& [viewIdx, coverageCount] : viewCoverage) { - if (nMaxViewCoverage>12) - if (nHitCount>nMaxHit) - break; + if (nViewCoverage>=nViewCoverageMax) + // if (nHit>nHitMax) + break; auto it_view = mapViewCoverageData.find(viewIdx); if (it_view == mapViewCoverageData.end()) { @@ -6047,14 +6054,14 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID)) { filteredCams.push_back(viewIdx); - ++nHitCount; + ++nHit; - if (nHitCount>nMaxHit) - break; + // if (nHit>=nHitMax) + // break; } } - ++nMaxViewCoverage; + ++nViewCoverage; } if (filteredCams.empty()) {