www.pudn.com > packmk2.rar > skybox.fx
// oi oi
float4x4 mViewProj;
float4x4 mInvViewProj;
float4x4 mInvView;
float4 view_position;
float sun_alfa, sun_theta, sun_shininess, sun_strength;
float zfar = 4000;
struct VS_INPUT
{
float3 Pos : POSITION;
float4 displacement : COLOR0;
};
struct VS_OUTPUT
{
float4 Pos : POSITION;
float3 v : TEXCOORD1;
float3 sun : TEXCOORD2;
};
texture EnvironmentMap;
samplerCUBE skySRGB = sampler_state
{
Texture = ;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
AddressW = CLAMP;
SRGBTexture = true;
};
samplerCUBE sky = sampler_state
{
Texture = ;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
AddressW = CLAMP;
};
VS_OUTPUT VShader(VS_INPUT i)
{
VS_OUTPUT o;
o.Pos = mul(float4(zfar*i.Pos,1), mViewProj);
/*float4 direction = float4(i.Pos.xy,1,1);
direction = mul(direction , mInvViewProj); */
//o.v = direction.xyz/direction.w - view_position.xyz/view_position.w;
o.v = i.Pos;
o.sun.x = cos(sun_theta)*sin(sun_alfa);
o.sun.y = sin(sun_theta);
o.sun.z = cos(sun_theta)*cos(sun_alfa);
return o;
}
float4 PShader(VS_OUTPUT i) : COLOR
{
float3 sunlight = sun_strength*pow(saturate(dot(normalize(i.v), i.sun)),sun_shininess)*float3(1.2, 0.4, 0.1);
float4 ut;
ut.a = 1;
ut.rgb = pow(texCUBE(skySRGB,i.v) + sunlight, 1/2.2);
//if(i.v.y < 0) ut.rgb = float3(0.090,0.244,0.23);
//ut.rgb = 0.5+0.5*i.v;
return ut;
}
float4 PShader1_1(VS_OUTPUT i) : COLOR
{
float4 ut;
ut.a = 1;
ut.rgb = texCUBE(sky,i.v);
return ut;
}
technique T0
{
pass P0
{
pixelshader = compile ps_2_0 PShader();
vertexshader = compile vs_1_1 VShader();
}
}
technique T1
{
pass P0
{
pixelshader = compile ps_1_1 PShader1_1();
vertexshader = compile vs_1_1 VShader();
}
}