|
|
|
@ -17905,7 +17905,7 @@ bool MeshTexture::SelectBestViewsForVirtualFaces( |
|
|
|
|
|
|
|
|
|
|
|
DEBUG_EXTRA("Selecting best views for %zu virtual faces", virtualFaceMap.size()); |
|
|
|
DEBUG_EXTRA("Selecting best views for %zu virtual faces", virtualFaceMap.size()); |
|
|
|
|
|
|
|
|
|
|
|
// ---------- 准备禁用视图列表(禁用最后一个单独数字 = 最大值的【所有】相机) ----------
|
|
|
|
// ---------- 准备禁用视图列表(禁用最后单个数字最大的【两个数值】的所有相机) ----------
|
|
|
|
std::unordered_set<IIndex> disabledViews; |
|
|
|
std::unordered_set<IIndex> disabledViews; |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct ViewDigitPair { |
|
|
|
struct ViewDigitPair { |
|
|
|
@ -17944,22 +17944,37 @@ bool MeshTexture::SelectBestViewsForVirtualFaces( |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ★ 找到最大的 digit 值
|
|
|
|
// ★ 找出最大的两个【不同】digit值
|
|
|
|
int maxDigit = -1; |
|
|
|
std::set<int> uniqueDigits; |
|
|
|
for (const auto& vd : viewDigits) { |
|
|
|
for (const auto& vd : viewDigits) { |
|
|
|
if (vd.digit > maxDigit) maxDigit = vd.digit; |
|
|
|
uniqueDigits.insert(vd.digit); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ★ 禁用【所有】digit == maxDigit 的视图(不再只禁前 N 个)
|
|
|
|
std::vector<int> topDigits; |
|
|
|
|
|
|
|
auto it = uniqueDigits.rbegin(); |
|
|
|
|
|
|
|
// 取最大的第一个
|
|
|
|
|
|
|
|
if (it != uniqueDigits.rend()) { |
|
|
|
|
|
|
|
topDigits.push_back(*it); |
|
|
|
|
|
|
|
++it; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 取最大的第二个(次大)
|
|
|
|
|
|
|
|
if (it != uniqueDigits.rend()) { |
|
|
|
|
|
|
|
topDigits.push_back(*it); |
|
|
|
|
|
|
|
++it; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ 禁用所有 digit 等于这两个最大值的视图
|
|
|
|
for (const auto& vd : viewDigits) { |
|
|
|
for (const auto& vd : viewDigits) { |
|
|
|
if (vd.digit == maxDigit) { |
|
|
|
if (std::find(topDigits.begin(), topDigits.end(), vd.digit) != topDigits.end()) { |
|
|
|
disabledViews.insert(vd.idx); |
|
|
|
disabledViews.insert(vd.idx); |
|
|
|
DEBUG_EXTRA("[DisabledView] idx=%d name=%s digit=%d (maxDigit=%d)", |
|
|
|
DEBUG_EXTRA("[DisabledView] idx=%d name=%s digit=%d (topDigits=[%d,%d])", |
|
|
|
vd.idx, images[vd.idx].name.c_str(), vd.digit, maxDigit); |
|
|
|
vd.idx, images[vd.idx].name.c_str(), vd.digit, |
|
|
|
|
|
|
|
topDigits[0], topDigits.size() > 1 ? topDigits[1] : -1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
DEBUG_EXTRA("[DisabledView] %zu views disabled (all with digit=%d)", |
|
|
|
DEBUG_EXTRA("[DisabledView] %zu views disabled (all with digit in [%d,%d])", |
|
|
|
disabledViews.size(), maxDigit); |
|
|
|
disabledViews.size(), |
|
|
|
|
|
|
|
topDigits[0], topDigits.size() > 1 ? topDigits[1] : -1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ---------- 初始化 ----------
|
|
|
|
// ---------- 初始化 ----------
|
|
|
|
|