Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Volume Grid Isosurface mesh issue

未關閉
#285 1 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
2/5
預估耗時
1-3 小時
新手友好度
48/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
停滯
技術堆疊
cpp

研究方向

從 src/volume_grid_scalar_quantity.cpp 開始,檢查 createIsosurfaceProgram() 和 registerIsosurfaceAsMesh(),其中展示了 MarchingCube 呼叫和座標轉換。將兩條路徑中的網格維度順序與體積緩衝區配置進行比較。當 volume-grid 等值面在兩種用法中都以正確的方向和單元順序算繪時,即表示完成。

由索引模型根據 Issue 內容生成。

描述

Hi,

I've run into an issue with the isosurface generation for volume grid scalar quantities. The problem appears to be that the change made to fix the frame transformation for #253 wasn't propagated into the grid dimensions passed to the MarchingCube library, resulting in the grid cells being interpreted in the wrong order.

The following shows a volume grid of the Stanford Bunny and its isosurface visualization with the 2.2.1 release:
Polyscope_Isosurface_Issue

By swizzling the grid dimensions passed into MarchingCube we get the following (correct) result instead:
Polyscope_Isosurface_Fix

The patch for the above fix is:

diff --git a/src/volume_grid_scalar_quantity.cpp b/src/volume_grid_scalar_quantity.cpp                                 
index cde441a..603841f 100644                                                                                          
--- a/src/volume_grid_scalar_quantity.cpp                                                                              
+++ b/src/volume_grid_scalar_quantity.cpp                                                                              
@@ -165,8 +165,8 @@ void VolumeGridNodeScalarQuantity::createIsosurfaceProgram() {                                     
                                                                                                                       
   // Extract the isosurface from the level set of the scalar field                                                    
   MC::mcMesh isosurfaceMesh;                                                                                          
-  MC::marching_cube(&values.data.front(), isosurfaceLevel.get(), parent.getGridNodeDim().x, parent.getGridNodeDim().y,
-                    parent.getGridNodeDim().z, isosurfaceMesh);                                                       
+  MC::marching_cube(&values.data.front(), isosurfaceLevel.get(), parent.getGridNodeDim().z, parent.getGridNodeDim().y,
+                    parent.getGridNodeDim().x, isosurfaceMesh);                                                       
                                                                                                                       
   // Transform the result to be aligned with our volume's spatial layout                                              
   glm::vec3 scale = parent.gridSpacing();                                                                             
@@ -215,8 +215,8 @@ SurfaceMesh* VolumeGridNodeScalarQuantity::registerIsosurfaceAsMesh(std::string                    
                                                                                                                       
   // extract the mesh                                                                                                 
   MC::mcMesh isosurfaceMesh;                                                                                          
-  MC::marching_cube(&values.data.front(), isosurfaceLevel.get(), parent.getGridNodeDim().x, parent.getGridNodeDim().y,
-                    parent.getGridNodeDim().z, isosurfaceMesh);                                                       
+  MC::marching_cube(&values.data.front(), isosurfaceLevel.get(), parent.getGridNodeDim().z, parent.getGridNodeDim().y,
+                    parent.getGridNodeDim().x, isosurfaceMesh);                                                       
   glm::vec3 scale = parent.gridSpacing();                                                                             
   for (auto& p : isosurfaceMesh.vertices) {                                                                           
     // swizzle to account for change of coordinate/buffer ordering in the MC lib                                      

I'm not sure how you prefer to manage the repo, but if you'd like me to open a PR for the fix I'm happy to. Thanks!

主要語言
C++
星號
2.2k
分支
242
平均合併
11 分鐘
30 天內合併 PR
1

貢獻指南

這個儲存庫沒有索引到貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

nmwsharp/polyscope 的其他 Issue

查看 nmwsharp/polyscope 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。