0001: // ------------------------------------------------------------
0002: // Phong シェーディング (slang:vertex program)
0003: // 
0004: // Copyright (c) 2003 IMAGIRE Takashi. All rights reserved.
0005: // ------------------------------------------------------------
0006: 
0007: // -------------------------------------------------------------
0008: // グローバル変数
0009: // -------------------------------------------------------------
0010: uniform vec3 LightPos;
0011: 
0012: // -------------------------------------------------------------
0013: // 頂点プログラムからフラグメントプログラムに渡すデータ
0014: // -------------------------------------------------------------
0015: varying vec3 VERTEX_COLOR;  // 頂点色
0016: varying vec3 VERTEX_EYE;    // 視線ベクトル
0017: varying vec3 VERTEX_NORMAL; // 法線ベクトル
0018: varying vec3 VERTEX_LIGHT;  // ライトベクトル
0019: 
0020: // ------------------------------------------------------------
0021: // 頂点シェーダプログラム
0022: // ------------------------------------------------------------
0023: void main(void)
0024: {
0025:     // 座標変換
0026:     gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
0027:     
0028:     // 色のための計算
0029:     vec4 pos    = gl_ModelViewMatrix * gl_Vertex;
0030:     vec3 L      = LightPos - vec3(pos);
0031:     vec3 N      = gl_NormalMatrix * gl_Normal;
0032: 
0033:     VERTEX_COLOR = vec3(gl_Color);
0034:     VERTEX_NORMAL = N;
0035:     VERTEX_LIGHT  = L;
0036:     VERTEX_EYE    = vec3(pos);
0037: }
0038: