最佳视图选择逻辑优化
This commit is contained in:
1 parent
68cb2ea1fc
commit
9ab39219b1
1 file changed
+19
-12
+19
-12
@@ -5714,7 +5714,8 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果夹角小于45度(cos(45°) ≈ 0.7071),则计入覆盖
|
// 如果夹角小于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<bool> processedFaces(faces.size(), false);
|
std::vector<bool> processedFaces(faces.size(), false);
|
||||||
@@ -5796,10 +5797,15 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
|
|||||||
const Normal& faceNormal = scene.mesh.faceNormals[idxFace];
|
const Normal& faceNormal = scene.mesh.faceNormals[idxFace];
|
||||||
const float cosAngle = cameraForward.dot(Point3f(faceNormal.x, faceNormal.y, faceNormal.z));
|
const float cosAngle = cameraForward.dot(Point3f(faceNormal.x, faceNormal.y, faceNormal.z));
|
||||||
|
|
||||||
if (cosAngle > fAngleThreshold)
|
if (cosAngle > fAngleThreshold2)
|
||||||
{ // 45度阈值
|
{
|
||||||
coverageCount++;
|
coverageCount++;
|
||||||
|
|
||||||
|
// viewData.faceToIndexMap[idxFace] = idxFace;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cosAngle > fAngleThreshold1)
|
||||||
|
{
|
||||||
viewData.faceToIndexMap[idxFace] = idxFace;
|
viewData.faceToIndexMap[idxFace] = idxFace;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6006,12 +6012,13 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
|
|||||||
|
|
||||||
IIndexArr filteredCams;
|
IIndexArr filteredCams;
|
||||||
|
|
||||||
int nHitCount = 0;
|
int nHit = 0;
|
||||||
int nMaxHit = 400;
|
int nHitMax = 1;
|
||||||
int nMaxViewCoverage = 0;
|
int nViewCoverage = 0;
|
||||||
|
int nViewCoverageMax = -1;
|
||||||
for (const auto& [viewIdx, coverageCount] : viewCoverage) {
|
for (const auto& [viewIdx, coverageCount] : viewCoverage) {
|
||||||
if (nMaxViewCoverage>12)
|
if (nViewCoverage>=nViewCoverageMax)
|
||||||
if (nHitCount>nMaxHit)
|
// if (nHit>nHitMax)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
auto it_view = mapViewCoverageData.find(viewIdx);
|
auto it_view = mapViewCoverageData.find(viewIdx);
|
||||||
@@ -6047,14 +6054,14 @@ bool MeshTexture::CreateVirtualFaces64(FaceDataViewArr& facesDatas, FaceDataView
|
|||||||
if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID))
|
if (!scene.is_face_delete_edge2(strName, virtualFaceCenterFaceID))
|
||||||
{
|
{
|
||||||
filteredCams.push_back(viewIdx);
|
filteredCams.push_back(viewIdx);
|
||||||
++nHitCount;
|
++nHit;
|
||||||
|
|
||||||
if (nHitCount>nMaxHit)
|
// if (nHit>=nHitMax)
|
||||||
break;
|
// break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
++nMaxViewCoverage;
|
++nViewCoverage;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filteredCams.empty()) {
|
if (filteredCams.empty()) {
|
||||||
|
|||||||
Reference in new issue
Block a user