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: