0001: // ---------------------------------------------------------------------------
0002: // 頂点プログラム出力データ
0003: // ---------------------------------------------------------------------------
0004: struct vertout
0005: {
0006:     float4 hpos     : HPOS; // 頂点座標
0007:     float4 tcoords  : TEX0; // テクスチャ座標
0008:     float4 eye      : TEX1; // 反射ベクトル
0009:     float4 light    : TEX2; // 光源ベクトル
0010: };
0011: // ---------------------------------------------------------------------------
0012: // フラグメントプログラム
0013: // ---------------------------------------------------------------------------
0014: fragout main(vertout I
0015:             , uniform texobj2D SrcTex : texunit0
0016:     )
0017: {
0018:     fragout O;
0019:     
0020:     float3 N = - 2.0f * f3tex2D( SrcTex, I.tcoords.xy ) + 1.0f;// 法線ベクトル
0021:     float3 E = normalize(I.eye.xyz);        // 視線ベクトル
0022:     float3 R = -E + 2.0f * dot(E, N) * N;   // 反射ベクトル
0023:     float3 L = normalize(I.light.xyz);      // 光源ベクトル
0024: 
0025:     float RL = max(dot(R,L), 0.0f);         // (反射,光源)
0026:     float NL = max(dot(N,L), 0.0f);         // (法線,光源)
0027: 
0028:     float4 amb = {0.1f, 0.05f,  0.04f, 1};  // 環境色
0029:     float4 dif = {1.0f, 0.6f, 0.4f, 1};     // 拡散色
0030:     float4 spe = {2.0f, 1.8f, 1.2f, 1};     // 反射色
0031: 
0032:     // フォンスペキュラー
0033:     O.col = amb + dif*NL + spe*pow(RL, 64);
0034:     
0035:     return O;
0036: } 
0037: