Simple Water

From GameStudio Wiki

Jump to: navigation, search
float4x4 matWorldViewProj;
float4x4 matWorld;
float4x4 matWorldView;
float3 vecViewPos;
float3 vecSkill41;
float3 vecSkill1;
float4 vecFog;
Texture mtlSkin1;
Texture mtlSkin2;

sampler s_Bump = sampler_state
{
	Texture = (mtlSkin1);
	MinFilter = LINEAR;
	MagFilter = LINEAR;
	MipFilter = LINEAR;
	AddressU = WRAP;
 	AddressV = WRAP;
};
sampler s_Cube = sampler_state
{
	Texture = (mtlSkin2);
	MinFilter = LINEAR;
	MagFilter = LINEAR;
	MipFilter = LINEAR;
	AddressU = CLAMP;
	AddressV = CLAMP;
	AddressW = CLAMP;
};
struct VS_IN
{
	float4 Pos: POSITION;
	float3 Normal: NORMAL;
	float2 Bump: TEXCOORD0;
	float3 Tangent: TEXCOORD1;
};
struct VS_OUT
{
	float4 Pos: POSITION;
	float Fog: FOG;
	float2 Bump: TEXCOORD0;
	float4 TanToCube0: TEXCOORD1;
	float4 TanToCube1: TEXCOORD2;
	float4 TanToCube2: TEXCOORD3;
};
VS_OUT WaterBump_VS(VS_IN IN)
{
	VS_OUT Out;
	Out.Pos = mul(IN.Pos, matWorldViewProj);
	float2 WaveDir;
	WaveDir.x = 5*IN.Bump.x;
	WaveDir.x += 0.01*vecSkill41.x;
	WaveDir.y = 5*IN.Bump.y;
	WaveDir.y += 0.01*vecSkill41.x;
	Out.Bump = WaveDir.xy;
	float3x3 ObjToTan;
	ObjToTan~[0] = IN.Tangent,
	ObjToTan~[1] = cross(IN.Normal, IN.Tangent);
	ObjToTan~[2] = 5*IN.Normal;
	Out.TanToCube0.xyz = mul(ObjToTan, matWorld[0].xyz);
	Out.TanToCube1.xyz = mul(ObjToTan, matWorld[1].xyz);
	Out.TanToCube2.xyz = mul(ObjToTan, matWorld[2].xyz);
	float3 PositionWorld = mul(IN.Pos, matWorld);
	float3 ViewerDir = normalize(vecViewPos - PositionWorld);
	Out.TanToCube0.w = ViewerDir.x;
	Out.TanToCube1.w = ViewerDir.y;
	Out.TanToCube2.w = ViewerDir.z;
	float ofog = 1 - (distance(PositionWorld, vecViewPos) - vecFog.x) * vecFog.z;
	Out.Fog = ofog;
	return Out;
}
technique drawWater
{
	pass p0
	{
		AlphaBlendEnable = true;
		ZwriteEnable = true;
		ZEnable = true;
		Sampler~[0] = (s_Bump);
		Sampler~[3] = (s_Cube);
//		PixelShaderConstant~[0] = {0.3,0.3,0.4,0.50};
		PixelShaderConstant~[0] = float4(vecSkill41.r,vecSkill41.g,vecSkill41.b,1);
		VertexShader = compile vs_1_1 WaterBump_VS();
		PixelShader =
		asm
		{
			ps.1.1
			tex t0
			texm3x3pad t1, t0_bx2
			texm3x3pad t2, t0_bx2
			texm3x3vspec t3, t0_bx2
			mul r0, t3, c0
		};
	}
}
Personal tools