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: