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 >
Wrap
Text File
|
2005-02-12
|
4KB
|
95 lines
//----------------------------------------------------------------------------------------------------------
// Vertex-shader para simulaci≤n de superficies reflectantes. Reflexi≤n por environment maping,
//----------------------------------------------------------------------------------------------------------
// Constantes especificadas por la aplicacion:
// c0 --> Constantes ( 0.0, 6.283185, 0.5, 1.0)
// |__c0.x -------> cero
// |__c0.y -------> 2 * PI
// |__c0.z -------> 0.5
// |__c0.w -------> 1
//
// c1 - c3 --> Matriz transformaci≤n a mundo
// c4 - c7 --> Matriz vista/proyecci≤n
// c8 --> Posici≤n cßmara
// |___c8.x ------> Posici≤n X de la cßmara
// |___c8.y ------> Posici≤n Y de la cßmara
// |___c8.z ------> Posici≤n Z de la cßmara
// |___c8.w ------> (((((TIEMPO para las funciones de onda)))))
//
// c14 --> Variables 6
// |__c14.x ------>
// |__c14.y ------>
// |__c14.z ------> Coef A de la ecuaci≤n del factor de niebla (A-B*d) A = end / end-start
// |__c14.w ------> Coef B de la ecuaci≤n del factor de niebla (A-B*d) B = 1 / end-start
//
// Vertex components (as specified in the vertex DECL):
// v0 = Position (stream 0)
// v1 = Normal (stream 0)
// v2 = Texcoords (stream 0)
//----------------------------------------------------------------------------------------------------------
vs.1.1
dcl_position v0
dcl_normal v1
dcl_texcoord v2
dcl_color v3
mov oD0, v3
//mov r10, v0
m4x3 r0, v0, c1 // Transformaci≤n de vΘrtice
mov r0.w, c0.w
m4x4 oPos, r0, c4 // Matriz de vista/proyecci≤n
//------------------------------------------------------
// - TRANSFORMACION NORMAL -
//------------------------------------------------------
m3x3 r1, v1, c1 // Transformaci≤n de la normal a mundo
dp3 r1.w, r1.xyz, r1.xyz // Normalizaci≤n de la normal
rsq r1.w, r1.w
mul r1.xyz, r1.xyz, r1.www
//------------------------------------------------------
// - OBTENCION VECTOR DE INCIDENCIA -
//------------------------------------------------------
sub r3.xyz, r0.xyz, c8.xyz // r3 = Pos.punto - Pos.camara
dp3 r3.w, r3.xyz, r3.xyz // Se normaliza para que el producto vectorial
rsq r3.w, r3.w // sirva para mezclar reflexion y refracci≤n
mul r3.xyz, r3.xyz, r3.www
//--------------------------
// - Calculo de la NIEBLA -
//--------------------------
rcp r3.w, r3.w // Obtenemos la distancia del punto a la cßmara para que sirva para calcular la niebla
mul r3.w, -r3.w, c14.w // F = A - B*d A = (end / (end - start)) B = 1 / (end - start)
add oFog, r3.w, c14.z
//-------------------------------------------------------------
// - PSEUDO-FACTOR DE FRESNELL (Mezcla reflexion/refraccion) -
//-------------------------------------------------------------
dp3 r4.w, r3.xyz, r1.xyz // Se utiliza el producto escalar de N.I negado
//sub r4.w, c0.w, -r4.w
//add oD1.w, c0.z, r4.w
//------------------------------------------------------
// - CALCULO REFLEXION -
//------------------------------------------------------
add r5.w, r4.w, r4.w
mad r6.xyz, r1.xyz, -r5.www, r3.xyz
mov r6.w, c0.w
// cambio de ejes
mov r6.z, -r6.z
mov r6.xy, r6.xz
// Coordenadas para el esphere-map = proy{R}xy * 0.5 + 0.5
mul r6.xy, r6.xy, c0.zz
add r6.xy, r6.xy, c0.zz
mov oT0.xy, r6.xy
//------------------------------------------------------
// - TEXTURA ADICIONAL -
//------------------------------------------------------
mov oT1, v2