#include using namespace wfl; using namespace psl; int main(void) { Start(); wfl::SetNumThreads(); //最大限にプロセッサコアを用いる // 物体モデルファイルの読み込みと設定 IndexedFaceSet model; model.LoadWrl("cube.wrl"); //読み込み model.Localize(); //物体を原点付近に置く model.SetWidth(2e-3); //外接矩形の横幅が2mmになるように物体サイズを設定 // フレームバッファの設定 double px = 4e-6, py = 4e-6; //サンプリング間隔 int nx = 1024, ny = 1024; //サンプリング数 WaveField frame(nx, ny, px, py); //フレームバッファの位置は(x,y,0)面 frame.Clear(); //シェーダーの設定 //WaveField diffuser(0); //特殊な拡散位相を用いる場合 //diffuser.LoadWf("diffuser1024x1024.wf"); //拡散位相の読み込み Vector light(-1.0, -3.0, -1.0); //照明光の方向 double env = 0.1; //環境光の割合 double gamma = 0.3; //補正制限値 TfbFlatShading flatShader(/*diffuser, */ gamma, light, env); //フラットシェーディング // SurfaceBuilderの設定 SurfaceBuilder sb(frame); //帯域制限のため,サンプル数とサンプル間隔等を正しく設定 sb.SetBandLimitMethod(3); //帯域制限をレベル3にする. sb.SetCenter(Point(0, 0, 0)); //帯域制限のため,ホログラムの中心位置(0,0,0)を設定 sb.SetDiffractionRatio(0.9); //回折率設定 sb.SetCullingRate(0.6); //カリング率設定 sb.SetShader(flatShader); //上で用意したシェーダーを組み込む // 物体モデルmodelからの光波を計算してフレームバッファに加算 sb.AddObjectField(frame, model); //フレネルホログラム用の物体光波を得るためホログラムの位置まで伝搬計算する //frame.ExactAsmProp(50e-3); //31行で帯域制限をオンにしたため,4倍拡張は不要 frame.AsmProp(50e-3); frame.SaveAsWf("frame.wf"); }