0001: // -------------------------------------------------------------
0002: // ディスプレースメントマップ
0003: // 
0004: // Copyright (c) 2002 IMAGIRE Takashi. All rights reserved.
0005: // -------------------------------------------------------------
0006: 
0007: // -------------------------------------------------------------
0008: // 頂点シェーダプログラム
0009: //  c0 - c3 - 座標変換
0010: //  c4.x    - ディスプレースする量
0011: //  c12     - (0.0, 0.5, 1.0, 2.0)
0012: //  c13     - 光源の方向
0013: // -------------------------------------------------------------
0014: VertexShader VS = asm
0015: {
0016:     vs_1_1
0017:     
0018:     dcl_position0 v0
0019:     dcl_normal0   v1
0020:     dcl_texcoord0 v2
0021:     dcl_sample0   v3
0022:     
0023:     mul r0, v1, c4.x    // 法線にディスプレースの大きさを掛ける
0024:     mul r0, r0, v3.x    // ★さらにマップの値を掛ける
0025:     add r0, v0, r0      // 変位を頂点に足す
0026:     mov r0.w, v0.w      // w成分は1
0027:     m4x4 oPos, r0, c0   // 座標変換
0028:     
0029:     dp3 r0, v1, c13     // ランバート拡散
0030:     max r0, r0, c12.x
0031:     add oD0, r0, c13.w
0032:     
0033:     mov oT0, v2         // テクスチャ座標
0034: };
0035: // -------------------------------------------------------------
0036: // 2パス目:ピクセルシェーダプログラム
0037: // -------------------------------------------------------------
0038: PIXELSHADER PS = asm
0039: {
0040:     ps.1.1
0041:     
0042:     tex t0
0043:     
0044:     mul r0, t0, v0
0045: };
0046: // -------------------------------------------------------------
0047: // テクニック
0048: // -------------------------------------------------------------
0049: technique TShader
0050: {
0051:     pass P0
0052:     {
0053:         // シェーダ
0054:         VertexShader = <VS>;
0055:         PixelShader  = <PS>;
0056:     }
0057: }
0058: