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 >
Wrap
Text File
|
2005-02-12
|
5KB
|
171 lines
//------------------------------------------------------------------------------------------
// Vertex shader para superficies oceßnicas
//------------------------------------------------------------------------------------------
// Constantes:
// c0 - c3: Matriz mundo/vista/proyecci≤n
// (*) CV_WORLDVIEWPROJ_0 0
// (*) CV_WORLDVIEWPROJ_1 1
// (*) CV_WORLDVIEWPROJ_2 2
// (*) CV_WORLDVIEWPROJ_3 3
//
// c4: Punto de vista
// (*) CV_VIEWERPOS 4
//
// c5: Constantes de usos multiples
// (*) CV_CONSTANTS 5
//
// c10: Escala de bump UV
// |__c10.x: para la u
// |__c10.y: para la V
// (*) CV_BUMP_UV_SCALE 10
//
// c11: Escala de la malla XYZ (vector --> para cada coordenada)
// (*) CV_MESH_XYZ_SCALE 11
//
// c12: Offset para tilear la malla oceßnica (vector)
// (*) CV_MESH_XYZ_OFFSET 12
//
// c13: Factor de curvatura
// |__c13.x: factor
// (*) CV_CURVATURE 13
//
// c14: Factor para aproximar el efecto fresnel
// |__c14.x: factor
// (*) CV_FRESNELAPPROX_POWFACTOR 14
//
// c15:
// |__c15.x: Factor de rango dinßmico para el environment map (com·n)
// |__c15.y: Factor de rango dinßmico para el environment map (especular)
// | (*) CV_DYNAMIC_RANGE 15
// |__c15.z: Coef A de la ecuaci≤n del factor de niebla (A-B*d) A = end / end-start
// |__c15.w: Coef B de la ecuaci≤n del factor de niebla (A-B*d) B = 1 / end-start
//-----------------------------------------------------------------------
// Componentes del vΘrtice:
// v0: Posicion (*) srcV v0
// v1: Normal (*) srcN v1
// v2: Coords. tex (*) srcTex v2
//-----------------------------------------------------------------------
// Registros:
// r0: (*) V
// r1: (*) E
// r2: (*) S
// r3: (*) SxT
// r4: (*) T
// r10: (*) Temp
// r11: (*) Temp1
//-----------------------------------------------------------------------
vs.1.1
dcl_position v0
dcl_normal v1
dcl_texcoord v2
//----------------------------------------------
// Escalado y offset de la posici≤n del vΘrtice
//----------------------------------------------
//mov r0, v0
mul r0, v0, c11
add r0, r0, c12
//----------------------------
// Aplicar grado de curvatura
//----------------------------
//add r10, r0, -c4
//mul r10, r10, c5.zxz
//dp3 r10, r10, r10
//mad r0.y, -r10.x, c13.x, r0.y
//---------------------------------------------------------------------
// Genera triedro tangente. Construye la matriz de reflexi≤n por pixel
// SxT: Normal (r3)
// S: Tangente 1 (r2)
// T: Tangente 2 (r4)
//---------------------------------------------------------------------
// Normalizaci≤n de la normal --> SxT
dp3 r3.w, v1, v1
rsq r3.w, r3.w
mul r3, v1, r3.w
// r2=(1,0,0)
mov r2, c5.zxx
// Prod vectorial --> T
mul r4, r3.zxyw, r2.yzxw
mad r4, r3.yzxw, r2.zxyw, -r4
// Normalizaci≤n de T
dp3 r4.w, r4, r4
rsq r4.w, r4.w
mul r4, r4, r4.w
// Prod vectorial --> S
mul r2, r4.zxyw, r3.yzxw
mad r2, r4.yzxw, r3.zxyw, -r2
// Normalizaci≤n de S
dp3 r2.w, r2, r2
rsq r2.w, r2.w
mul r2, r2, r2.w
// Con el triedro construimos la matriz de reflexi≤n por pixel
mov oT1.xyz, r2
mov oT2.xyz, r3
mov oT3.xyz, r4
// Se calcula el vector al punto de vista y se pasa a la matriz de reflexion por pixel
add oT1.w, c4.x, -r0.x
add oT2.w, c4.y, -r0.y
add oT3.w, c4.z, -r0.z
//---------------------------------------------------------
// Escalado de las coordenadas de textura para el bump map
//---------------------------------------------------------
mul oT0.xy, v2.xy, c10.xy
//--------------------------------------------------
// Calculo del vector al punto de vista normalizado
//--------------------------------------------------
add r1, c4, -r0
dp3 r1.w, r1, r1
rsq r1.w, r1.w
mul r1.xyz, r1.xyz, r1.www
//--------------------------
// - Calculo de la NIEBLA -
//--------------------------
rcp r6.w, r1.w // Obtenemos la distancia del punto a la cßmara para que sirva para calcular la niebla
mul r6.w, -r6.w, c15.w // F = A - B*d A = (end / (end - start)) B = 1 / (end - start)
add oFog, r6.w, c15.z
//mov oFog, c5.z
//------------------------------------------------
// Calculo del termino de Fresnel aproximado
// 1
// F = ---------------------------
// ( 1 + E.N ) ^ Fresnel_Power_Factor(c14.x)
//------------------------------------------------
dp3 r10, r1, r3
add r10, c5.z, r10
mov r10.y, c14.x
lit r10.z, r10.xxyy
rcp r10.z, r10.z
mul r10.z, r10.z, c15.x
// setup dynamic range fresnel term
expp r11.y, r10.z
mov oD0.w, r11.y
add r10.z, r10.z, -r11.y
mul oD1.w, r10.z, c15.y
// setup lerp factor for ocean color
dp3 oD0.xyz, r1, r3
// vertex to screen
dp4 oPos.x, r0, c0
dp4 oPos.y, r0, c1
dp4 oPos.z, r0, c2
dp4 oPos.w, r0, c3