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 / OceanSurface.vsh < prev    next >
Text File  |  2005-02-12  |  5KB  |  171 lines

  1. //------------------------------------------------------------------------------------------
  2. // Vertex shader para superficies oceßnicas
  3. //------------------------------------------------------------------------------------------
  4. // Constantes:
  5. //    c0 - c3: Matriz mundo/vista/proyecci≤n
  6. //           (*) CV_WORLDVIEWPROJ_0  0
  7. //           (*) CV_WORLDVIEWPROJ_1  1
  8. //           (*) CV_WORLDVIEWPROJ_2  2
  9. //           (*) CV_WORLDVIEWPROJ_3  3
  10. //
  11. //    c4: Punto de vista
  12. //           (*) CV_VIEWERPOS        4
  13. //
  14. //    c5: Constantes de usos multiples
  15. //           (*) CV_CONSTANTS        5
  16. //
  17. //    c10: Escala de bump UV
  18. //     |__c10.x: para la u
  19. //     |__c10.y: para la V
  20. //           (*) CV_BUMP_UV_SCALE    10
  21. //
  22. //    c11: Escala de la malla XYZ (vector --> para cada coordenada)
  23. //           (*) CV_MESH_XYZ_SCALE   11 
  24. //
  25. //    c12: Offset para tilear la malla oceßnica (vector)
  26. //           (*) CV_MESH_XYZ_OFFSET  12 
  27. //
  28. //    c13: Factor de curvatura
  29. //     |__c13.x: factor
  30. //           (*) CV_CURVATURE        13
  31. //
  32. //    c14: Factor para aproximar el efecto fresnel
  33. //     |__c14.x: factor
  34. //           (*) CV_FRESNELAPPROX_POWFACTOR  14
  35. //
  36. //    c15: 
  37. //     |__c15.x: Factor de rango dinßmico para el environment map (com·n)
  38. //     |__c15.y: Factor de rango dinßmico para el environment map (especular)
  39. //     |     (*) CV_DYNAMIC_RANGE            15     
  40. //     |__c15.z: Coef A de la ecuaci≤n del factor de niebla (A-B*d)  A = end / end-start
  41. //     |__c15.w: Coef B de la ecuaci≤n del factor de niebla (A-B*d)  B = 1 / end-start
  42. //-----------------------------------------------------------------------
  43. // Componentes del vΘrtice:
  44. //    v0: Posicion       (*) srcV    v0
  45. //    v1: Normal         (*) srcN    v1
  46. //    v2: Coords. tex    (*) srcTex  v2
  47. //-----------------------------------------------------------------------
  48. // Registros:
  49. //    r0: (*) V
  50. //    r1: (*) E
  51. //    r2: (*) S
  52. //    r3: (*) SxT
  53. //    r4: (*) T
  54. //   r10: (*) Temp
  55. //   r11: (*) Temp1  
  56. //-----------------------------------------------------------------------
  57.  
  58. vs.1.1
  59.  
  60. dcl_position v0
  61. dcl_normal   v1
  62. dcl_texcoord v2
  63.  
  64. //----------------------------------------------
  65. // Escalado y offset de la posici≤n del vΘrtice
  66. //----------------------------------------------
  67. //mov r0, v0
  68. mul r0, v0, c11
  69. add r0, r0, c12
  70.  
  71. //----------------------------
  72. // Aplicar grado de curvatura
  73. //----------------------------
  74. //add r10, r0, -c4
  75. //mul r10, r10, c5.zxz
  76. //dp3 r10, r10, r10
  77. //mad r0.y, -r10.x, c13.x, r0.y
  78.  
  79. //---------------------------------------------------------------------
  80. // Genera triedro tangente. Construye la matriz de reflexi≤n por pixel
  81. //   SxT: Normal     (r3)
  82. //     S: Tangente 1 (r2)
  83. //     T: Tangente 2 (r4)
  84. //---------------------------------------------------------------------
  85.  
  86. // Normalizaci≤n de la normal --> SxT
  87. dp3 r3.w, v1, v1     
  88. rsq r3.w, r3.w
  89. mul r3, v1, r3.w
  90.  
  91. // r2=(1,0,0)
  92. mov r2, c5.zxx
  93.  
  94. // Prod vectorial --> T
  95. mul r4, r3.zxyw, r2.yzxw
  96. mad r4, r3.yzxw, r2.zxyw, -r4
  97.  
  98. // Normalizaci≤n de T
  99. dp3 r4.w, r4, r4
  100. rsq r4.w, r4.w
  101. mul r4, r4, r4.w
  102.  
  103. // Prod vectorial --> S
  104. mul r2, r4.zxyw, r3.yzxw
  105. mad r2, r4.yzxw, r3.zxyw, -r2
  106.  
  107. // Normalizaci≤n de S
  108. dp3 r2.w, r2, r2
  109. rsq r2.w, r2.w
  110. mul r2, r2, r2.w
  111.  
  112. // Con el triedro construimos la matriz de reflexi≤n por pixel
  113. mov oT1.xyz, r2
  114. mov oT2.xyz, r3
  115. mov oT3.xyz, r4
  116.  
  117. // Se calcula el vector al punto de vista y se pasa a la matriz de reflexion por pixel
  118. add oT1.w, c4.x, -r0.x
  119. add oT2.w, c4.y, -r0.y
  120. add oT3.w, c4.z, -r0.z
  121.  
  122. //---------------------------------------------------------
  123. // Escalado de las coordenadas de textura para el bump map
  124. //---------------------------------------------------------
  125. mul oT0.xy, v2.xy, c10.xy
  126.  
  127. //--------------------------------------------------
  128. // Calculo del vector al punto de vista normalizado
  129. //--------------------------------------------------
  130. add r1, c4, -r0
  131. dp3 r1.w, r1, r1
  132. rsq r1.w, r1.w
  133. mul r1.xyz, r1.xyz, r1.www
  134.  
  135. //--------------------------
  136. // - Calculo de la NIEBLA - 
  137. //--------------------------
  138. rcp r6.w, r1.w          // Obtenemos la distancia del punto a la cßmara para que sirva para calcular la niebla
  139. mul r6.w, -r6.w, c15.w  // F = A - B*d      A = (end / (end - start))       B = 1 / (end - start)
  140. add oFog, r6.w, c15.z
  141. //mov oFog, c5.z
  142.  
  143. //------------------------------------------------
  144. // Calculo del termino de Fresnel aproximado
  145. //                  1
  146. // F = ---------------------------
  147. //     ( 1 + E.N ) ^ Fresnel_Power_Factor(c14.x)
  148. //------------------------------------------------
  149. dp3 r10, r1, r3
  150. add r10, c5.z, r10
  151. mov r10.y, c14.x
  152. lit r10.z, r10.xxyy
  153. rcp r10.z, r10.z
  154. mul r10.z, r10.z, c15.x
  155.  
  156. // setup dynamic range fresnel term
  157. expp r11.y, r10.z
  158. mov oD0.w, r11.y
  159.  
  160. add r10.z, r10.z, -r11.y
  161. mul oD1.w, r10.z, c15.y
  162.  
  163. // setup lerp factor for ocean color
  164. dp3 oD0.xyz, r1, r3
  165.  
  166. // vertex to screen
  167. dp4 oPos.x, r0, c0
  168. dp4 oPos.y, r0, c1
  169. dp4 oPos.z, r0, c2
  170. dp4 oPos.w, r0, c3
  171.