0001: vs.1.0
0002: 
0003: ; c0-3   -- world + ビュー + 透視変換行列
0004: ; c4-7   -- world 行列
0005: ; c8-11  -- world の逆転置行列
0006: ; c12    -- {0.0, 0.5, 1.0, 2.0}
0007: ; c13    -- ライトのベクトル
0008: ; c14    -- カメラの位置
0009: ; c15    -- メッシュの色
0010: ; c16    -- diffuse ライトの色
0011: ; c17    -- specular ライトの色
0012: ;
0013: ; v0    頂点の座標値
0014: ; v3    法線ベクトル
0015: ; v7    テクスチャ座標0
0016: 
0017: 
0018: ;座標変換
0019: dp4 oPos.x, v0, c0
0020: dp4 oPos.y, v0, c1
0021: dp4 oPos.z, v0, c2
0022: dp4 oPos.w, v0, c3
0023: 
0024: ; 視点から頂点の方向e
0025: add r1,   c14, -v0
0026: dp3 r1.w, r1,   r1
0027: rsq r1.w, r1.w
0028: mul r1,   r1,   r1.w            ; r1 = e = 正規化(視点 - 頂点)
0029: 
0030: ; Phone すぺきゅらー (cos^2γ)
0031: dp3 r2.w, c13, v3               ; (l,n)
0032: dp3 r2.x, c13, r1               ; (l,e)
0033: dp3 r2.y, v3,  r1               ; (n,e)
0034: 
0035: mul r2.z, r2.w,  r2.y           ; r2.z = (l,n)(n,e)
0036: mad r2.z, c12.w, r2.z, -r2.x    ; r2.z = 2(l,n)(n,e)-(l,e) = cosγ
0037: max r2.z, r2.z,  c12.x          ; 負の値をカット
0038: mov r2.w, c12.w                 ; 2乗するためのパラメータを入れる
0039: lit r2.z, r2.zzww               ; r2.z = r2.z^r2.w
0040: mul r3,   c17,  r2.z            ; スペキュラーの色をつける
0041: 
0042: dp4 r2.z, c13,  v3              ; (l,n)+ambient
0043: mad oD0,  c15,  r2.z, r3        ; ランバート diffuse
0044: 
0045: ; メッシュのテクスチャー
0046: mov oT0, v7
0047: