OffsetMapping_specular.asm
上传用户:xhbjoy
上传日期:2014-10-07
资源大小:38068k
文件大小:1k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Pixel Shader for doing bump mapping with parallax plus diffuse and specular lighting by nfz 
  2. // uv               TEXCOORD0 
  3. // lightDir            TEXCOORD1 
  4. // eyeDir            TEXCOORD2 
  5. // half               TEXCOORD3 
  6. // lightDiffuse         c0 
  7. // lightSpecular      c1 
  8. // Parallax scale and bias c2 
  9. // normal/height map   texunit 0 - height map in alpha channel 
  10. // diffuse texture      texunit 1 
  11. ps.1.4 
  12. texld r0, t0               // get height 
  13. texcrd r2.xyz, t0            // get uv coordinates 
  14. texcrd r3.xyz, t2            // get eyedir vector 
  15. mad r0.xyz, r0.a, c2.x, c2.y   // displacement = height * scale + bias 
  16. mad r2.xyz, r3, r0, r2         // newtexcoord = eyedir * displacement + uv 
  17. phase 
  18. texld r0, r2.xyz            // get normal N using newtexcoord 
  19. texld r1, r2.xyz            // get diffuse texture using newtexcoord 
  20. texcrd r4.xyz, t1            // get lightdir vector 
  21. texcrd r5.xyz, t3            // get half angle vector 
  22. dp3_sat r5.rgb, r0_bx2, r5         // N dot H - spec calc 
  23. dp3_sat r4.rgb, r0_bx2, r4         // N dot L - diffuse calc 
  24. + mul r5.a, r5.r, r5.r 
  25. mul r0.rgb, r4, r1            // colour = diffusetex * N dot L 
  26. + mul r5.a, r5.a, r5.a 
  27. mul r5.rgb, r5.a, r5.a          
  28. mul r5.rgb, r5, r5          
  29. mul r5.rgb, r5, r5          
  30. mul r5.rgb, r5, c1            // specular = (N dot H)^32 * specularlight 
  31. mad r0.rgb, r0, c0, r5         // colour = diffusetex * (N dot L)* diffuselight + specular 
  32. + mov r0.a, c2.b