0001: // ---------------------------------------------------------------------------
0002: // 頂点シェーダ出力データ
0003: // ---------------------------------------------------------------------------
0004: struct vpconn {
0005:     float4 color0 : COL0;   // 頂点色
0006:     float4 color1 : COL1;   // 法線ベクトル
0007: };
0008: 
0009: // ---------------------------------------------------------------------------
0010: // Phong shading フラグメントプログラム
0011: // ---------------------------------------------------------------------------
0012: fragout main(vpconn I
0013:                 , uniform float4 Half
0014: ) {
0015:     fragout O;
0016: 
0017:     I.color1.w = 0.5;               // なぜかαに0.5が入ってない
0018:     float4 N = 2.0f*I.color1-1.0f;  // 法線ベクトルを-1~1に変える
0019:     N = normalize(N);               // 規格化
0020:     float  HN = max(dot(Half, N), 0.00000001f);
0021: 
0022:     O.col =   I.color0              // 環境色+拡散光
0023:             + 1.0f * pow(HN, 4);    // 反射光
0024: 
0025:     return O;
0026: } 
0027: