プログラミング」カテゴリーアーカイブ

プログラミングメモ

プログラミング環境をいろいろ移行しようとしたら,やたら詰まったのでメモ

1. OpenCV2.4.8からopencv_haartraining_engine.libが無くなった.
気付かずにリンクしようとして死んでました.

2. Visual Studio2013でEigenを使っていると特定の状況でコンパイラがクラッシュする.

template<typename T, int p>
T det( const Eigen::Matrix<T,p,p>& cov ){
  /* 計算 */
}

こんな感じのテンプレート関数を書くと,コンパイラがクラッシュして「上記の場所付近のプログラムを単純化するか変更してください」といってくる.
ダミーのテンプレート引数を追加した,以下のコードだとコンパイルできる.

template<typename T, int p, int q=0>
T det( const Eigen::Matrix<T,p,p>& cov ){
  /* 計算 */
}

Eigenのテンプレートが何か悪さをしているのだと思うけれど,詳細はよくわからない.
Visual Studio2012では問題なくコンパイルできていたので,構文エラーではないと思うのだけれど…

Mandelbox4

デモに使いたかった機能をあらかた実装しました.
大雑把にはDefferedシェーディングしてから,DOF(被写界深度)処理をかけるという流れになっています.DOFにはバイラテラルフィルタを使っているので,ピントの合っている場所と合っていない場所の色は混じらないようになっています.

final_00 final_02

final_03 final_04

後はライティングをもっと調整するのと,更に高速化を図ろうかと思っています.

Mandelbox3

Mandelboxのデモですが,Defferedレンダリングで作ろうと思っています.
スクリーンスペースでレイマーチングしているのでそこまで処理速度的なメリットはないのですが,ポストエフェクトがやりやすそうというのと,なにより一度やってみたかったので.

とりあえずMRTで位置,法線,深度,レイの反復回数を出力してみました.

position normal
(左:position, 右:normal)

depth
iteration
(左:depth, 右:iteration)

結構いい感じに描画できている気がします.
特にiterationはもっとガタガタになると思っていたのですが,滑らかな絵が得られています.

フレームレートは 512x512pix で70fps程度,もっと高解像度にしたいので高速化しないと.

Mandelbox2

引き続き,Mandelboxデモの実装をやっています.
とりあえず,C# + SharpDXで書きなおしてみました.
録画の関係でかなりフレームレートが落ちていますが,実際は割りとヌルヌル動きます.

SharpDXは初めて使ったのですが,思ったよりも苦戦させられました.
Managed DXという名前からして,XNAのような良い感じにラップされたものをイメージしていたのですが,実際には生のDirectXよりはいくらかマシ,という程度でした.
そもそもC#で3Dをやるのが間違っているみたいですね,C++ と OpenGLで作りたい.

Mandelboxのほうはまだパラメータ調整のコツが全然つかめていない状態です.
デモまでに良く見えるパラメータを探す必要があります.
レンダリングの品質も良くないので,改良しないと.