我正在尝试使用 VTK(绘制彩色等值面)可视化我存储在常规网格上的一些数据。我编写了一些代码以 vtk 旧格式转储数据,该格式适用于低分辨率版本的数据。我可以使用 ParaView 或 VTK 库提取和查看预期的等值面。当我在每个维度上将分辨率提高 10 倍时(nx 从大约 100 到 1000,与 ny、nz 相同),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();