我想要使用VTK(繪製彩色等值面)在一個規則的網格上存儲一些數據。我編寫了一些代碼來轉儲vtk傳統格式的數據,該格式適用於低分辨率版本的數據。我可以使用ParaView或VTK庫提取和查看預期的等值面。當我在每個維度上將分辨率提高10倍(nx從大約100到1000,與ny,nz相同)時,使用VTK庫編寫的paraview和查看器都不正確。它們看起來像一組稍微離軸的工作表,而不是一個「斑點」。我從其他測試中知道數據本身是正確的。vtk數據格式錯誤
下面我遺留的vtk格式轉儲代碼有什麼問題嗎?我不明白查找表的作用,但它似乎適用於低分辨率的情況。
std::ofstream out(filename);
out << "# vtk DataFile Version 3.0" << std::endl;
out << "Signed distance/biharmonic visualizer" << std::endl;
out << "ASCII" << std::endl;
out << "DATASET STRUCTURED_POINTS" << std::endl;
out << "DIMENSIONS " << nx << " " << ny << " " << nz << std::endl;
out << "ORIGIN 0 0 0" << std::endl;
out << "SPACING " << h << " " << h << " " << h << std::endl;
out << "POINT_DATA " << nx*ny*nz << std::endl;
out << "SCALARS signedDistance double" << std::endl;
out << "LOOKUP_TABLE default" << std::endl;
for(size_t i = 0; i < nx; ++i)
for(size_t j = 0; j < ny; ++j)
for(size_t k = 0; k < nz; ++k)
out << tempPhi(i,j,k) << std::endl;
out << "SCALARS biharmonic double" << std::endl;
out << "LOOKUP_TABLE default" << std::endl;
for(size_t i = 0; i < nx; ++i)
for(size_t j = 0; j < ny; ++j)
for(size_t k = 0; k < nz; ++k)
out << biharmonic(i,j,k) << std::endl;
out.close();
不知道這裏有什麼問題 - 這看起來似乎是輸出一個與VTK文件格式規範相匹配的文件(儘管我並不真正瞭解C++)。如果只輸出一個標量變量(在較高分辨率下),讀者是否工作?你可以發佈一個示例VTK文件,以便我們可以看到實際的輸出嗎? – Chris
同樣的問題,即使只是輸出第一個字段。完整的示例數據文件在這裏:http://www.cs.utah.edu/~benjones/gridDump000008.vtk。 此外,下面是iso表面與其應該是什麼的圖片:http://www.cs.utah.edu/~benjones/isoFail.png –