TEST-STRCMP4CODES
pass
#fillmode wireframe alphaBlend srcFactor(one) add dstFactor(one)
shaderProgram -target vertexProgram -method compile -version 1_1 bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID geomToCamera -constantCount 3 bindConstants 7 -bindingID frameInfo bindConstants 11 -bindingID immediateData -data ($wmXRepeat, 0, $wmXWaveHeight, $wmXSpeed) bindConstants 12 -bindingID immediateData -data (0, $wmYRepeat, $wmYWaveHeight, $wmYSpeed) # pre-evaluate these setf xscale (-$wmXRepeat * $wmXWaveHeight) setf yscale (-$wmYRepeat * $wmYWaveHeight) bindConstants 13 -bindingID immediateData -data ($xscale,$yscale, 1,0) bindConstants 14 -bindingID allStandardLightData -constantCount 4 -constantType float bindConstants 18 -bindingID cameraToGlobal -constantCount 3 shaderSource float4 frameInfo : register(c7); float4 waveDataX : register(c11); float4 waveDataY : register(c12); float4 waveDataHelper : register(c13); float4x4 clipSpaceMatrix : register(c0); float4x3 cameraSpaceMatrix : register(c4); float4x3 cameraToGlobalMatrix : register(c18); float4 lightDirection : register(c14); float4 lightColor : register(c15); const static float4 refractionWeights={1,1,2,0}; struct InputVertex { float4 position: POSITION0; float3 normal : NORMAL0; float2 texc : TEXCOORD0; }; struct OutputVertex { float4 clipPosition : POSITION; float3 normal : TEXCOORD0; float3 viewVector : TEXCOORD1; }; static float2 waveCenter1 = {0.0, 0.0}; static float2 waveCenter2 = {-0.6, 0.2}; static float2 timeScale = {2,1}; static float2 waveHeight = {0.04, 0.02}; static float2 distScale = {12, 8}; float4 ComputeWavePositionTwoWay(float2 pos1, float2 pos2) {
float2 vec;
float4 dist; vec = waveCenter1 - pos1; dist.x = dot(vec, vec); vec = waveCenter2 - pos1; dist.y = dot(vec,vec);
vec = waveCenter2 - pos2;
dist.z = dot(vec, vec); vec = waveCenter2 - pos2; dist.w = dot(vec,vec);
dist *= distScale.xyxy;
float4 sinResult = sin(dist + frameInfo.w * timeScale.xyxy);
//sinResult = 1.0- abs(sinResult);
return(sinResult);
} float2 ComputeWavePosition(float2 pos1) {
float2 vec;
float2 dist;
vec = waveCenter1 - pos1;
dist.x = dot(vec, vec); vec = waveCenter2 - pos1; dist.y = dot(vec,vec);
dist *= distScale.xy;
float2 sinResult = sin(dist + frameInfo.w * timeScale);
//sinResult = 1.0- abs(sinResult);
return(sinResult);
} OutputVertex VertexMain( InputVertex inputVertex) { // Do Y-direction waves // r0 = (x, y, z, t) OutputVertex outputVertex;
float4 pos = inputVertex.position;
float2 sample1, sample2, sample3;
sample1 = inputVertex.position; sample2 = inputVertex.position; sample3 = inputVertex.position; sample2.x += 0.1; sample3.y += 0.1;
float4 heights1=ComputeWavePositionTwoWay(sample1, sample2); float2 heights2=ComputeWavePosition(sample3);
float3 pos1, pos2;
pos1 = pos;
pos2 = pos;
pos.z += (heights1.x* waveHeight.x);// + heights1.y * waveHeight.y); pos1.z += (heights1.z* waveHeight.x);// + heights1.w * waveHeight.y); pos2.z += (heights2.x* waveHeight.x);// + heights2.y * waveHeight.y);
pos1.x +=0.1; pos2.y +=0.1; float3 vec1, vec2; vec1 = normalize(pos1 - pos); vec2 = normalize(pos2 - pos);
float3 normal = cross(vec1, vec2);
normal = mul(normal, (float3x3)cameraSpaceMatrix);
float3 viewVector = mul(pos, cameraSpaceMatrix);
outputVertex.viewVector = normalize(-viewVector);
outputVertex.clipPosition = mul(pos, clipSpaceMatrix); outputVertex.normal = normal; return(outputVertex); } endShaderSource end # end shaderProgram shaderProgram -target pixelProgram -method assemble bindConstants 0 -bindingID allStandardLightData -constantCount 4 -constantType float
shaderSource ps_2_0 def c10,20,4,0,0 def c11, 0,0.5,1,2 dcl t0 dcl t1 ; v
dcl_cube s0
nrm r0, t0 ; n add r1, r0, r0 ; 2N dp3 r1.w, r0, t1 ; N.V
mad r2.xyz, r1, r1.w, -t1 ; 2N * (N.V) -V
texld r5, r2, s0
dp3 r3.x, r2, c0 ; R.L pow r4, r3.x, c10.x
mov_sat r1.x, r1.w
add r6.x, c11.z, -r1.x ; 1 - Fresnel
pow r3.y, r6.x, c10.y ; N.V ^ 4
mul r7, r5, r3.y mad r4, r4, r3.y, r7 mul r4, r4, c11.y
mov oC0, r4
endShaderSource end sampler 0
texture $wmReflectionTexture textureAddressing clamp clamp clamp
end end # pass
enddef