pixel.psd
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:1k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. // pixel shader file: pixel.vsd
  2. ps_2_x
  3. // c0 hold the light position
  4. // c1.xyz hold the light direction, while c1.w hold the light area, c1.xyz should be normalized, c1.w larger, 
  5. dcl v0      // ambient diffuse color
  6. dcl_2d s0   // sampler
  7. dcl t0      // texture0
  8. dcl t1      // texture1, in fact it hold the position value of the pixel, transformed by world matrix
  9. def c10, 0.0, 0.0, 0.0, 0.0
  10. def c11, 0.5, 0.5, 0.5, 1.0
  11. texld r0, t0, s0   // sample the tex color
  12. ////////calculate the diffuse color from the spotlight/////////////////////////////
  13. sub r4, t1, c0        // get the vector from light to pixel
  14. mov r4.w, c10.x       // set the 4th component of r4 to 0
  15. nrm r5, r4            // normalize the vector
  16. dp4 r5.w, r5, c1      // don't care the value of c1.w,    r5.w is equal to 0
  17. //  if( r5.w > c1.w )
  18. //     lit the pixel using spotlight
  19. //  else
  20. //     doesnt lit the pixel
  21. sub r6, c1, r5   // if (r5.w > c1.w) then lit the pixel, r6.w < 0
  22. mov r6.x, r6.w
  23. mov r6.y, r6.w
  24. mov r6.z, r6.w
  25. mov r8, c10
  26. mov r9, c11
  27. cmp r7, r6, r8, r9    //
  28. add r1, v0, r7    // increase the diffuse color
  29. min r1.w, r1.w, c11.x    // clamp the alpha value to 1.0
  30. //////////////////////////////////////////////////////////////////////////////////
  31. mul r2, r0, r1     // dot product the tex and the diffuse
  32. mov oC0, r2        // output the pixel color