#include using namespace wfl; using namespace psl; int main(void) { Start(); wfl::SetNumThreads(); //最大限にプロセッサコアを用いる //モデルの設定 double objectSize = 2.5e-3; //物体の実サイズを2.5mmとする Point posObject(0.5e-3, -0.3e-3, 0);//物体の中心位置 //物体モデルファイルの読み込みと設定 IndexedFaceSet model; model.LoadDxf("Sphere200.dxf"); //球体の読み込み model.Localize(); //物体を一時的に原点に置く model.SetWidth(objectSize); //物体サイズを設定 model += posObject; //物体位置を設定 model.AutoNormalVector(); //グーローシェーディングのための準備 // フレームバッファの設定 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, -1.0, -0.3); //照明光の方向 double env = 0.1; //環境光の割合 double gamma = 0.01; //補正制限値 TfbGouraudShading gouraudShader(/*diffuser, */ gamma, light, env); //グーローシェーディング準備 //テクスチャ画像の読み込みと設定 Texture texImage; //テクスチャ画像読み込み用 texImage.LoadBmp("MoonTexture.bmp", INTENSITY, 0, 2.2); //テクスチャ画像をガンマ値2.2で読み込む texImage.SetWidth(objectSize); //物体の横サイズと画像横サイズを合わせる texImage.SetHeight(objectSize); //物体の縦サイズと画像縦サイズを合わせる texImage.SetCenter(posObject); //物体の位置と画像の位置を合わせる TfbOlthoProjectMapping moonTexture(texImage); //正投影テクスチャマッピングの準備 //SurfaceBuilderの設定 SurfaceBuilder sb(frame); sb.SetDiffractionRatio(0.9); //回折率設定 sb.SetCullingRate(0.6); //カリング率設定 sb.SetShader(gouraudShader); //上で用意したシェーダーを組み込む sb.SetTexture(moonTexture); //上で用意したテクスチャ画像を組み込む //物体モデルmodelからの光波を計算してフレームバッファに加算 sb.AddObjectField(frame, model); //物体光波計算 frame.SaveAsWf("object.wf"); //デバッグ用にセーブ //フレネルホログラム用の物体光波を得るためホログラムの位置まで伝搬計算する frame.ExactAsmProp(50e-3); frame.SaveAsWf("frame.wf"); //物体光波の保存 }