浏览代码

Merge pull request #38506 from madmiraal/fix-scale-calculation

Fix scale calculation in VHACD Volume::Voxelize().
Rémi Verschelde 5 年之前
父节点
当前提交
50f4f0f9ae
共有 2 个文件被更改,包括 22 次插入2 次删除
  1. 20 0
      thirdparty/vhacd/0005-fix-scale-calculation.patch
  2. 2 2
      thirdparty/vhacd/inc/vhacdVolume.h

+ 20 - 0
thirdparty/vhacd/0005-fix-scale-calculation.patch

@@ -0,0 +1,20 @@
+diff --git a/thirdparty/vhacd/inc/vhacdVolume.h b/thirdparty/vhacd/inc/vhacdVolume.h
+index 8c47fa1e2c..c445f20122 100644
+--- a/thirdparty/vhacd/inc/vhacdVolume.h
++++ b/thirdparty/vhacd/inc/vhacdVolume.h
+@@ -316,13 +316,13 @@ void Volume::Voxelize(const T* const points, const uint32_t stridePoints, const
+ 
+     double d[3] = { m_maxBB[0] - m_minBB[0], m_maxBB[1] - m_minBB[1], m_maxBB[2] - m_minBB[2] };
+     double r;
+-    if (d[0] > d[1] && d[0] > d[2]) {
++    if (d[0] >= d[1] && d[0] >= d[2]) {
+         r = d[0];
+         m_dim[0] = dim;
+         m_dim[1] = 2 + static_cast<size_t>(dim * d[1] / d[0]);
+         m_dim[2] = 2 + static_cast<size_t>(dim * d[2] / d[0]);
+     }
+-    else if (d[1] > d[0] && d[1] > d[2]) {
++    else if (d[1] >= d[0] && d[1] >= d[2]) {
+         r = d[1];
+         m_dim[1] = dim;
+         m_dim[0] = 2 + static_cast<size_t>(dim * d[0] / d[1]);

+ 2 - 2
thirdparty/vhacd/inc/vhacdVolume.h

@@ -316,13 +316,13 @@ void Volume::Voxelize(const T* const points, const uint32_t stridePoints, const
 
 
     double d[3] = { m_maxBB[0] - m_minBB[0], m_maxBB[1] - m_minBB[1], m_maxBB[2] - m_minBB[2] };
     double d[3] = { m_maxBB[0] - m_minBB[0], m_maxBB[1] - m_minBB[1], m_maxBB[2] - m_minBB[2] };
     double r;
     double r;
-    if (d[0] > d[1] && d[0] > d[2]) {
+    if (d[0] >= d[1] && d[0] >= d[2]) {
         r = d[0];
         r = d[0];
         m_dim[0] = dim;
         m_dim[0] = dim;
         m_dim[1] = 2 + static_cast<size_t>(dim * d[1] / d[0]);
         m_dim[1] = 2 + static_cast<size_t>(dim * d[1] / d[0]);
         m_dim[2] = 2 + static_cast<size_t>(dim * d[2] / d[0]);
         m_dim[2] = 2 + static_cast<size_t>(dim * d[2] / d[0]);
     }
     }
-    else if (d[1] > d[0] && d[1] > d[2]) {
+    else if (d[1] >= d[0] && d[1] >= d[2]) {
         r = d[1];
         r = d[1];
         m_dim[1] = dim;
         m_dim[1] = dim;
         m_dim[0] = 2 + static_cast<size_t>(dim * d[0] / d[1]);
         m_dim[0] = 2 + static_cast<size_t>(dim * d[0] / d[1]);