フリーViewerで可視化するためのボリュームデータ出力方法!
今回は高機能フリーViewerであるParaViewを使ってボリュームデータを可視化する方法をご紹介します。
ParaViewをインストール
まずはここからParaViewをインストールして下さい。
ParaViewの基本的な使い方はチュートリアルで学べます。ここに日本語のチュートリアルが"Japanese Translation of the ParaView Tutorial for version 3.6"という名前で置いてあるので、この記事を読んで興味を持った方はご覧下さい。ParaViewがフリーソフトとは思えないほど高機能なことを実感できると思います。
ボリュームデータをVTKフォーマットで出力
ParaViewは色んな形式のファイルをインポートできますが、今回はVTKフォーマットにしてボリュームデータを作成します。
VTKファイルの出力コードは下記のようになります。
#include <stdio.h> int main(int argc, const char * argv[]) { const int nx = 10; const int ny = 10; const int nz = 10; const char* const fineName = "test.vtk"; FILE* const file = fopen( fineName, "w+"); fprintf( file, "# vtk DataFile Version 3.0\n" ); fprintf( file, "vtk output\n" ); fprintf( file, "ASCII\n" ); fprintf( file, "DATASET STRUCTURED_POINTS\n" ); fprintf( file, "DIMENSIONS %d %d %d\n", nx, ny, nz ); fprintf( file, "ORIGIN 0.0 0.0 0.0\n" ); fprintf( file, "SPACING 1.0 1.0 1.0\n" ); fprintf( file, "POINT_DATA %d\n", nx*ny*nz ); fprintf( file, "SCALARS scalars float\n" ); fprintf( file, "LOOKUP_TABLE default\n" ); for( int z = 0 ; z < nz ; ++z ) { for ( int y = 0 ; y < ny ; ++y ) { for ( int x = 0 ; x < nx ; ++x ) { fprintf( file, "%f\n", static_cast<float>(x + 2*y + 3*z) ); } } } fclose( file ); return 0; }
VTKフォーマットの解説
VTKフォーマットはヘッダー部分にデータの形式を記述して、後は値を羅列するだけという構造になっています。ヘッダーの中で重要な部分だけ解説していきます。
"DATASET"の部分でデータの形を指定します。今回は格子形状で作成しました。
"DIMENSIONS"にはXYZ方向それぞれにいくつセルが含まれるかを指定します。
"ORIGIN"は原点、"SPACING"はセル1辺の長さです。"POINT_DATA"にはデータの総数を入れます。
今回は一番単純な形を選びましたが他にも色んな形状があります。興味のある方はこちらを参考にして下さい。
ParaViewでボリュームレンダリング表示
では上のコードで出力したファイルをParaViewでボリュームレンダリングしてみましょう。
①ParaViewを起動して.vtkファイルを開いて下さい。
②PropertiesのApplyを押してデフォルト設定のままデータを読み込みます。
③データの表現方法をOutlineからVolumeに変更します。
④Toggle Color Legend Visibilityを押すと値と色の関係が表示されます。
⑤表示方法を変えたい場合はEdit Color Mapを押して下さい。
このようにParaViewを使えば簡単にボリュームレンダリング表示を確認できます。