読者です 読者をやめる 読者になる 読者になる

フリーViewerで可視化するためのボリュームデータ出力方法!

ParaView ボリュームレンダリング VTK

今回は高機能フリー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を押して下さい。

f:id:cflat-inc:20131108131641p:plain

このようにParaViewを使えば簡単にボリュームレンダリング表示を確認できます。

粒子ボリュームレンダリング―理論とプログラミング

粒子ボリュームレンダリング―理論とプログラミング