Behind.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /******************************************************************************/
  2. #include "!Header.h"
  3. /******************************************************************************/
  4. #define PARAMS \
  5. uniform Bool skin ,\
  6. uniform Int textures
  7. /******************************************************************************/
  8. void VS
  9. (
  10. VtxInput vtx,
  11. out Vec4 outVtx:POSITION ,
  12. out Vec2 outTex:TEXCOORD0,
  13. out VecH outNrm:TEXCOORD1, // !! not Normalized !!
  14. out Vec outPos:TEXCOORD2,
  15. PARAMS
  16. )
  17. {
  18. outTex=vtx.tex();
  19. if(!skin)
  20. {
  21. outNrm=TransformDir(vtx.nrm());
  22. outVtx=Project(outPos=TransformPos(vtx.pos()));
  23. }else
  24. {
  25. VecI bone=vtx.bone();
  26. outNrm=TransformDir(vtx.nrm(), bone, vtx.weight());
  27. outVtx=Project(outPos=TransformPos(vtx.pos(), bone, vtx.weight()));
  28. }
  29. }
  30. /******************************************************************************/
  31. Vec4 PS
  32. (
  33. PIXEL,
  34. Vec2 inTex:TEXCOORD0,
  35. Vec inNrm:TEXCOORD1,
  36. Vec inPos:TEXCOORD2,
  37. PARAMS
  38. ):COLOR
  39. {
  40. // perform alpha testing
  41. if(textures==1)clip(Tex(Col, inTex).a + MaterialAlpha()-1);else // alpha in 'Col' texture
  42. if(textures==2)clip(Tex(Nrm, inTex).a + MaterialAlpha()-1); // alpha in 'Nrm' texture, #MaterialTextureChannelOrder
  43. Flt alpha=Sat((inPos.z-TexDepthPoint(PIXEL_TO_SCREEN)-BehindBias)/0.3f);
  44. Vec4 col =Lerp(Color[0], Color[1], Abs(Normalize(inNrm).z));
  45. col.a*=alpha;
  46. return col;
  47. }
  48. /******************************************************************************/
  49. CUSTOM_TECHNIQUE // this is defined in C++ as a macro
  50. /******************************************************************************/