#include using namespace wfl; using namespace psl; int main(void) { Start(); // x-z平面上で正三角形のポリゴンデータ作成 psl::Polygon triangle(3); triangle[1].SetX(0.5); triangle[1].SetZ(-sqrt(3.0) / 2.0); triangle[2] = triangle[1]; triangle[2].SetX(-0.5); // ポリゴンの大きさ,位置,傾き設定 triangle.Localize(); //ポリゴンの中心を原点にする triangle *= 2e-3; //1辺の長さを設定.単位:m triangle *= RMatrixY(15 * Deg)*RMatrixX(30 * Deg); //傾き // フレームバッファの設定 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, -1.0); //照明光の方向 double env = 0.3; //環境光の割合 double gam = 0.5; //補正制限値 TfbFlatShading flatShader(/*diffuser,*/ gam, light, env); //乱数位相によるフラットシェーディング // SurfaceBuilderの設定 SurfaceBuilder sb(frame); sb.SetShader(flatShader); //上で用意したシェーダーを組み込む // ポリゴンからの光波を計算してフレームバッファに加算 sb.SetCurrentPolygon(triangle); sb.AddPolygonField(frame); frame.SaveAsWf("frame.wf"); }