home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 May / Gamestar_73_2005-05_dvd.iso / Dema / IMPERIAL_GLORY / data1.cab / NewComponent1 / Data.pak / Engine / IceSurface.vsh next >
Text File  |  2005-02-12  |  4KB  |  95 lines

  1. //----------------------------------------------------------------------------------------------------------
  2. // Vertex-shader para simulaci≤n de superficies reflectantes. Reflexi≤n por environment maping,
  3. //----------------------------------------------------------------------------------------------------------
  4. // Constantes especificadas por la aplicacion:
  5. //    c0      --> Constantes ( 0.0, 6.283185, 0.5, 1.0)
  6. //    |__c0.x -------> cero
  7. //    |__c0.y -------> 2 * PI
  8. //    |__c0.z -------> 0.5
  9. //    |__c0.w -------> 1
  10. //
  11. //    c1 - c3 --> Matriz transformaci≤n a mundo
  12. //    c4 - c7 --> Matriz vista/proyecci≤n
  13. //    c8      --> Posici≤n cßmara
  14. //    |___c8.x ------> Posici≤n X de la cßmara 
  15. //    |___c8.y ------> Posici≤n Y de la cßmara 
  16. //    |___c8.z ------> Posici≤n Z de la cßmara 
  17. //    |___c8.w ------> (((((TIEMPO para las funciones de onda)))))
  18. //
  19. //    c14     --> Variables 6
  20. //    |__c14.x ------> 
  21. //    |__c14.y ------> 
  22. //    |__c14.z ------> Coef A de la ecuaci≤n del factor de niebla (A-B*d)  A = end / end-start
  23. //    |__c14.w ------> Coef B de la ecuaci≤n del factor de niebla (A-B*d)  B = 1 / end-start
  24. // 
  25. // Vertex components (as specified in the vertex DECL):
  26. //    v0    = Position   (stream 0)
  27. //    v1    = Normal     (stream 0)
  28. //    v2    = Texcoords  (stream 0)
  29. //----------------------------------------------------------------------------------------------------------
  30. vs.1.1
  31.  
  32. dcl_position v0
  33. dcl_normal   v1
  34. dcl_texcoord v2
  35. dcl_color    v3
  36.  
  37. mov oD0, v3
  38.  
  39. //mov r10, v0
  40. m4x3 r0, v0, c1                  // Transformaci≤n de vΘrtice
  41. mov r0.w, c0.w
  42.  
  43. m4x4 oPos, r0, c4                 // Matriz de vista/proyecci≤n
  44.  
  45. //------------------------------------------------------
  46. // - TRANSFORMACION  NORMAL -
  47. //------------------------------------------------------
  48. m3x3 r1, v1, c1                  // Transformaci≤n de la normal a mundo
  49. dp3 r1.w, r1.xyz, r1.xyz         // Normalizaci≤n de la normal
  50. rsq r1.w, r1.w
  51. mul r1.xyz, r1.xyz, r1.www
  52.  
  53. //------------------------------------------------------
  54. // - OBTENCION VECTOR DE INCIDENCIA -
  55. //------------------------------------------------------
  56. sub r3.xyz, r0.xyz, c8.xyz       // r3 = Pos.punto - Pos.camara
  57. dp3 r3.w, r3.xyz, r3.xyz         // Se normaliza para que el producto vectorial 
  58. rsq r3.w, r3.w                   //   sirva para mezclar reflexion y refracci≤n
  59. mul r3.xyz, r3.xyz, r3.www
  60.  
  61. //--------------------------
  62. // - Calculo de la NIEBLA - 
  63. //--------------------------
  64. rcp r3.w, r3.w          // Obtenemos la distancia del punto a la cßmara para que sirva para calcular la niebla
  65. mul r3.w, -r3.w, c14.w  // F = A - B*d      A = (end / (end - start))       B = 1 / (end - start)
  66. add oFog, r3.w, c14.z
  67.  
  68. //-------------------------------------------------------------
  69. // - PSEUDO-FACTOR DE FRESNELL (Mezcla reflexion/refraccion) -
  70. //-------------------------------------------------------------
  71. dp3 r4.w, r3.xyz, r1.xyz         // Se utiliza el producto escalar de N.I negado
  72. //sub r4.w, c0.w, -r4.w
  73. //add oD1.w, c0.z, r4.w
  74.  
  75. //------------------------------------------------------
  76. // - CALCULO REFLEXION -
  77. //------------------------------------------------------
  78. add r5.w, r4.w, r4.w
  79. mad r6.xyz, r1.xyz, -r5.www, r3.xyz
  80. mov r6.w, c0.w
  81.  
  82. // cambio de ejes
  83. mov r6.z, -r6.z
  84. mov r6.xy, r6.xz
  85.  
  86. // Coordenadas para el esphere-map = proy{R}xy * 0.5 + 0.5
  87. mul r6.xy, r6.xy, c0.zz
  88. add r6.xy, r6.xy, c0.zz
  89. mov oT0.xy, r6.xy
  90.  
  91. //------------------------------------------------------
  92. // - TEXTURA ADICIONAL -
  93. //------------------------------------------------------
  94. mov oT1, v2
  95.