0001: // ------------------------------------------------------------ 0002: // Phong シェーディング (slang:fragment program) 0003: // 0004: // Copyright (c) 2003 IMAGIRE Takashi. All rights reserved. 0005: // ------------------------------------------------------------ 0006: 0007: // ------------------------------------------------------------- 0008: // 頂点プログラムからフラグメントプログラムに渡すデータ 0009: // ------------------------------------------------------------- 0010: varying vec3 VERTEX_COLOR; 0011: varying vec3 VERTEX_EYE; 0012: varying vec3 VERTEX_NORMAL; 0013: varying vec3 VERTEX_LIGHT; 0014: 0015: // ------------------------------------------------------------ 0016: // フラグメントシェーダプログラム 0017: // ------------------------------------------------------------ 0018: void main (void) 0019: { 0020: vec3 N = normalize(VERTEX_NORMAL); // 法線ベクトル 0021: vec3 L = normalize(VERTEX_LIGHT); // ライトベクトル 0022: vec3 E = normalize(VERTEX_EYE); // 視線ベクトル 0023: vec3 R = reflect(L, N); // 反射ベクトル 0024: 0025: // Phong speqular 0026: float spec = pow(max(dot(R, E), 0.0), 50.0); 0027: 0028: gl_FragColor = vec4 (VERTEX_COLOR, 1.0) // 頂点色 0029: * vec4(max(dot(N,L), 0.0)) // Lambert 拡散強度 0030: + vec4 (0.8) * vec4 (spec); // 鏡面反射色 0031: } 0032: